WedX - журнал о программировании и компьютерных науках

Храните 3d модели в игре, лучший способ

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

29.05.2010

  • хранить 3D-модели в игре?: О чем вы говорите: в памяти (пока она используется) или на диске (после установки игры)? 29.05.2010
  • Лучший способ полностью зависит от вашей игры. Если ваш текущий формат подходит для вашей игры, сделайте это. Если вы говорите о форматах файлов, то есть несколько стандартных форматов, которые вы можете использовать, например, некоторые из упомянутых здесь и здесь. 29.05.2010

Ответы:


1

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

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

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

29.05.2010
  • Списки отображения устарели. 29.05.2010
  • @SurvivalMachine: Я этого не знал. Прошло много времени с тех пор, как я занимался программированием на grpahics. Спасибо за предупреждение; Я обновил свой ответ. 30.05.2010
  • Мне кажется, что производительность VBO по сравнению со списками отображения действительно зависит от видеокарты. Я также провел несколько поисков, и несколько обсуждений велись годами, и они указывали на то, что новые карты в то время начинали демонстрировать более высокую производительность VBO, чем DL. В любом случае, отказ от списков отображения (IMO) является достаточной причиной для того, чтобы держаться от них подальше, не говоря уже о том, что в DirectX нет эквивалента списка отображения, поэтому, если вы когда-либо хотели абстрагировать свой движок, чтобы обеспечить поддержку DirectX, вы пришлось бы перейти к массивам вершин или VBO. 30.05.2010

  • 2

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

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

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

    30.05.2010
  • Теперь я храню свои треугольники на std :: vector, но он работает очень медленно: / Я должен хранить на std :: vector, потому что я проверяю столкновения с ними, есть ли лучший способ, чем вектор? 30.05.2010
  • Я бы использовал обычный массив. std :: vector будет иметь накладные расходы, потому что он предназначен для хранения часто изменяющейся структуры данных; но поскольку вы просто загружаете данные один раз, и вы должны знать (или вычислить), сколько именно треугольников вам нужно сохранить, вам не нужны дополнительные возможности вектора. Если вы действительно хотите, вы можете загрузить его в вектор, а затем скопировать его в массив после загрузки. В любом случае, цикл по массиву, вероятно, даст вам дополнительную скорость, которая вам нужна. 30.05.2010
  • Также убедитесь, что вы делаете столкновение более эффективно, чем просто проверяете столкновение со всеми треугольниками в каждом кадре. Вы должны делать что-то более высокоуровневое, например, проверку ограничивающего прямоугольника или даже квадродерево / октодерево в большой сцене, и только если эти проверки верны, вы должны углубляться в треугольники только сталкивающихся сеток. 30.05.2010
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

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


    Для любых предложений по сайту: [email protected]