Почему я должен использовать структуру узла для не оснащенной модели? - PullRequest
0 голосов
/ 22 апреля 2020


Я работаю с Vulkan уже несколько недель. У меня есть вопрос о структуре данных модели:
Я использую Assimp для загрузки файлов fbx и dae. В этом случае загруженная модель обычно содержит несколько узлов (RootNode и их дочерние узлы).
Должна ли я сохранить эту структуру на неоснащенных моделях? Или я мог бы преобразовать все сетки (или, вернее, их вершины) в мировое пространство при первой загрузке путем умножения на матрицу смещения узла (а затем удалить структуру узла в моей программе)? Потому что я никогда не видел, чтобы кто-то преобразовывал узел (и его сетки) после загрузки, если модель не сфальсифицирована.
Или есть какая-то другая причина, почему я должен сохранить эту структуру?

1 Ответ

0 голосов
/ 23 апреля 2020

Assimp также предлагает флаг aiProcess_PreTransformVertices для выравнивания иерархии преобразования. Конечно, вы также можете сделать это вручную, используя матрицы aiNode::mTransformation и умножая их в правильном порядке.

Потенциальная проблема с этими подходами (особенно с флагом) может заключаться в том, что свойства материала подсетки могут быть потеряны. Assimp не заботится о том, имеют ли подсетки разные свойства материала, а просто объединяет их, но свойства материала могут быть потеряны для некоторой подэлемента sh. Это также относится к другим свойствам, таким как имена sub-me sh. Если подсетки будут объединены, останется только одно (произвольно выбранное?) Имя sub-me sh.

Т.е. вы захотите предотвратить выравнивание иерархии узлов, если хотите использовать указанные c свойства (имена, свойства материала) подсетей.

Если вас интересует только их преобразование в мировое пространство: если вы никогда не собираетесь что-то делать с узлами в объектном пространстве (например, преобразование подузел по отношению к родительскому узлу), то я не вижу причины не превращать их в мировое пространство.

...