Как лучше всего хранить 3d модели в игре? Я храню в векторах: векторные треугольники (каждый треугольник содержит количество текскордов, номер вершины и количество нормалей), векторные точки; векторные нормали; вектор texCords;
Храните 3d модели в игре, лучший способ
- хранить 3D-модели в игре?: О чем вы говорите: в памяти (пока она используется) или на диске (после установки игры)? 29.05.2010
- Лучший способ полностью зависит от вашей игры. Если ваш текущий формат подходит для вашей игры, сделайте это. Если вы говорите о форматах файлов, то есть несколько стандартных форматов, которые вы можете использовать, например, некоторые из упомянутых здесь и здесь. 29.05.2010
Ответы:
Я не уверен, что представляет собой «лучший метод» в этом случае, так как это будет зависеть от ситуации, и в вашем вопросе он в некоторой степени открыт для интерпретации.
Если вы говорите о том, как быстро визуализировать статические объекты, вы можете пройти долгий путь, используя Медийные списки. Их можно использовать для запоминания всех вызовов OpenGL один раз, а затем вызвать эти инструкции для отображения объект всякий раз, когда он используется в вашей игре. Все накладные расходы, которые вы понесли для вычисления местоположения вершин, нормалей и т. Д., Выполняются только один раз при построении каждого списка отображения. Недостатком является то, что вы не увидите большого прироста производительности, если ваши модели будут меняться слишком часто.
РЕДАКТИРОВАТЬ: SurvivalMachine ниже упоминается, что списки отображения устарели. В частности, они объявлены устаревшими в OpenGL версии 3.0 и полностью удалены из стандарта в версии 3.1. После небольшого исследования выяснилось, что предпочтительной альтернативой является расширение Vertex Buffer Object (VBO). , хотя некоторые источники, которые я нашел, утверждали, что производительность не так хороша, как списки отображения.
Я решил импортировать модели из формата .ms3d, и хотя позже я могу провести рефакторинг, я думаю, что это обеспечило достойную основу для структуры данных моих 3D-моделей.
spec (в Формат заголовка C) довольно просто читать; Я пишу свою игру на Java, поэтому я просто портировал каждую структуру данных: вершину, треугольник, группу, материал и, возможно, элементы скелетной анимации.
Но на самом деле модель - это всего лишь тройка вершин (или треугольников), каждая из которых имеет материал, верно? Начните с создания этих базовых структур, напишите функцию рисования, которая принимает модель в качестве аргумента и рисует ее, а затем добавляйте любые другие функции, которые могут вам понадобиться, по мере необходимости. Итерационный дизайн, если хотите.