Храните 3d модели в игре, лучший способ - PullRequest
2 голосов
/ 29 мая 2010

Как лучше всего хранить 3d модели в игре? Я храню в векторах: векторные треугольники (каждый треугольник содержит количество текстовых кордов, номер вершины и число нормалей) векторные точки; векторные нормали; вектор texCords;

Ответы [ 2 ]

3 голосов
/ 29 мая 2010

Я не уверен, что представляет собой «лучший метод» в этом случае, поскольку это будет зависеть от ситуации, и в вашем вопросе он несколько открыт для интерпретации.

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

РЕДАКТИРОВАТЬ: SurvivalMachine ниже упоминается, что списки отображения устарели. В частности, они устарели в версии 3.0 OpenGL и полностью удалены из стандарта в версии 3.1. После небольшого исследования выясняется, что расширение Vertex Buffer Object (VBO) является предпочтительной альтернативой, хотя ряд источников, которые я обнаружил, утверждал, что производительность не так хороша, как списки отображения.

0 голосов
/ 30 мая 2010

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

spec (в формате заголовка C) - довольно простое чтение; Я пишу свою игру на Java, поэтому я просто перенес ее на каждую структуру данных: вершину, треугольник, группу, материал и, опционально, элементы скелетной анимации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...