Импортирование 3d-модели - нужно ли использовать для индексации собственный тип вершины? - PullRequest
0 голосов
/ 12 ноября 2018

Я импортирую 3d-модель (используя FBX SDK) с C ++ и OpenGL.

Я сделал тип вершины:

struct Vertex {
    Vec3 position;
    Vec2 texCoord;
    Vec3 normal;
    Vec3 binormal;
    Vec3 tangent;
    SkinInfo skin;
}

В настоящее время я присваиваю std::numeric_limits<float>::infinity() неиспользуемым компонентам при загрузке модели. И создайте класс сетки с std::vector<Vertex>.

Ctor класса ячеек меняет список вершин на чередующийся массив и вычисляет смещение и шаг, пропуская неиспользуемые компоненты.

Проблема в том, что при загрузке модели. В случае простого объекта есть только информация о положении, УФ и нормальном состоянии; какая трата памяти.

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

Мне нужно использовать индексированный массив вершин для производительности (glDrawElements), но я не могу найти лучшего решения без использования типа вершин для дедупликации и индексации. Есть идея получше?

1 Ответ

0 голосов
/ 12 ноября 2018

Большинство приложений рендеринга производительности имеют (небольшой) набор форматов вершин, которые они используют. Для ваших атрибутов я вижу три возможных формата вершин: unskinned / unbumpmapped, unskinned-with-bump-mapping и skinded (с bump-mapping). Может также существовать возможность использования формата скинов без разметки, но это зависит от вас и ваших данных.

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

Короче говоря, ничто не заставляет использовать один формат вершин. Поэтому, если это не соответствует вашим потребностям, не ограничивайте себя только этим форматом.

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