Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Custom tile picking

Custom tile picking

Джек АллигаторПостоялецwww1 ноя. 201721:22#0
Продолжаю делать стратежку со сферической картой.
Вместо тысячи слов:
+ custom tiles

Почему кастомные, а не гексы - потому что в результате получаются не только гексы, но и 12 пятиугольников на местах исходных вершин икосаэдра.
Задача - определить id тайла под курсором. Тайлов 655362(восьмой уровень разбиения икосаэдра).
Я бы очень обрадовался, будь простой формульный способ определить тайл.
Но пока не нашел ничего лучше классического color picking - когда рендерят объекты в fbo, в качестве цвета закраски установив id ноды.
И всё бы хорошо, но жрет ресурсов немерянно.
Даже после всех оптимизаций сажает фпс и жрет 150мб памяти гпу.
Притом всё это тратится на атрибуты, т.е. уменьшение вьюпорта до 100х100 через glScissor почти не дает никакого выигрыша в фпс и тем более не экономит память.

Были мысли как-то через сферические координаты нахимичить, но не представляю как конвертить (x,y) экранные декартовые в сферические.
Ещё думаю сэкономить на точности координат везде где это возможно, а то пока по дефолту стоит f32.

Какие ещё способы предложите?
Интересуют принципиально иные способы, потому как color picking, как мне кажется, не самый оптимальный.

БаберЗабаненwww1 ноя. 201721:34#1
Посчитай при помощи матриц
MrShoorУчастникwww1 ноя. 201721:58#2
Джек Аллигатор
> Какие ещё способы предложите?
Сделать рейкаст в сферу. По координатам на сфере надо найти треугольник исходного икосаедра, типа вот треугольник:
triangle | Custom tile picking
Далее в этом треугольнике считаешь барицентрические координаты для своей точки, и округляешь их (до точности, соответствующей количеству разбиений. Например для 16 разбиейний округляешь до 1/16). Попадаешь в одну из вершин треугольников:
triangle2 | Custom tile picking
Которая по совместительству является центром одного из твоих гексов/пятиугольников. Округляешь полученное float значение до некоторого fixed point, и идешь в хешмапу, из которой достаешь по центру гекса его ID
MrShoorУчастникwww1 ноя. 201722:04#3
Дополнение.
Как найти соотвтествующий треугольник в исходном икосаэдре.
1. Пускаем луч в сферу, находим точку пересечения со сферой.
2. Берем эту точку, и пускаем из неё луч в центр сферы, и ищем пересечение с одним из 20 треугольников икосаэдра.
Джек АллигаторПостоялецwww1 ноя. 201722:17#4
Бабер
glasm
MrShoor
Спасибо! Идеи понял, буду экспериментировать.

Ещё пришла идея предельной оптимизации color picking - предзаписать id тайлов в текстуру и рендерить её на менее деталлизованной сфере.
Но тут тоже надо экспериментировать - не понятно, хватит ли точности и не будет ли потребление памяти идентичным.

/ Форум / Программирование игр / Графика

Тема в архиве.

2001—2018 © GameDev.ru — Разработка игр