Столкновение с 3D-моделью местности

Итак, после неудачной попытки внедрить загрузку ландшафта карты высот в среду 3D-игры, я как бы сжульничал и загрузил свой ландшафт в 3D-игру, используя вместо этого модели из блендера в виде файлов OBJ. Я как бы понимал, что это будет дорого и, вероятно, потом укусит меня за задницу, но в то время мне было все равно.

Итак, теперь я нахожусь в точке, где мне нужно реализовать столкновение с ландшафтом и моделью. Обычно, если бы я загрузил свой ландшафт картами высот, это было бы легко, но теперь я не понимаю, как реализовать столкновение модели ландшафта, поскольку оба они технически являются сетками.

Как правило, меши, загружаемые из файлов OBJ, используют ограничивающую рамку или столкновение сфер для обнаружения столкновений между моделями. Но в моем случае сетка ландшафта огромна, и другие модели (танки, люди, деревья...) лежат поверх моего меша ландшафта. Так что ни один из этих методов не работает.

Еще одна моя попытка состояла в том, чтобы напрямую извлечь все данные о 80000 вершинах из моего OBJ-файла ландшафта, сравнить эти данные о вершинах с данными из других моих моделей. Но проблема в том, что это крайне неэффективно и дорого из-за того, что я должен проверять все 80000 вершин в каждом цикле рендеринга, что приводит к резкому падению FPS и делает игру неиграбельной.

Есть ли у кого-нибудь предложения о том, как реализовать столкновение моделей местности, когда и модель, и местность загружаются из файлов OBJ и являются сетками? Или мне просто нужно вернуться к загрузке ландшафта с карт высот?


person Mantracker    schedule 16.03.2014    source источник
comment
Вы пытались создать карту высот из сетки (после загрузки сетки из объекта)?   -  person Anton Angelov    schedule 02.10.2014


Ответы (2)


Обнаружение столкновений треугольного супа было тщательно исследовано, по нему есть несколько публикаций и книг (например, http://realtimecollisiondetection.net/). И самое главное, есть довольно эффективные библиотеки с открытым исходным кодом, которые сделают всю работу за вас. Популярным выбором среди разработчиков физических движков является OPCODE.

person datenwolf    schedule 16.03.2014
comment
Спасибо за информацию, но у меня проблемы с загрузкой OPCODE и других библиотек. Как правило, мне очень раздражает и сложно загружать другие библиотеки в мой проект. Помимо OPCODE, RAPID и подобных библиотек, есть ли какая-либо другая более известная и документированная библиотека для коллизий? - person Mantracker; 18.03.2014

Если у вас есть карта высот для вашего ландшафта, вы все равно можете использовать ее для расчета столкновений. Нет проблем с одновременным использованием треугольной сетки для рендеринга и карты высот для столкновений.

person kolenda    schedule 17.03.2014
comment
Это проблема. Ландшафт на самом деле является моделью, сделанной из блендера. У меня есть только файлы текстур и файл OBJ для местности. Нет карт высот. Файлы OBJ содержат только триангулированные вершины. Мне как бы нужно пройти через все вершины для всех треугольников и каким-то образом обнаружить столкновение, используя эти вершины. - person Mantracker; 18.03.2014
comment
Если на вашем ландшафте нет пещер и т. д., вы можете запечь карту высот из своего меша. Я не уверен, как это сделать в Blender, но это возможно. Это решение будет намного быстрее, чем любое решение на основе сетки. - person kolenda; 18.03.2014
comment
За исключением того, что это пустыня с пещерами, колоннами... А вершины представляют собой триангулированную сетку. Хотя определенно можно было бы сделать карту высот из файла OBJ. - person Mantracker; 18.03.2014
comment
Если подумать, есть ли какой-нибудь инструмент (например, Blender), который может создать карту высот bmp из файла OBJ? Большинство инструментов, таких как Blender, создают 3D-модель из файлов bmp, а как насчет наоборот? - person Mantracker; 18.03.2014
comment
Попробуйте это: wiki.blender.org/index.php /Doc:2.4/Учебники/Текстуры/Карты/ - person kolenda; 19.03.2014