Я пытаюсь визуализировать текстурированную модель, используя данные из файла FBX с OpenGL, но координаты текстуры неверны.
Сводка данных модели, предоставленных файлом FBX, включает UV-координаты для ссылки на текстуру.которые сопоставлены с вершинами модели.
Совершенно очевидно, что модель имеет 113958 интересующих вершин.Насколько я понимаю, «PolygonVertexIndices» указывают на «Вершины», а «UVIndices» указывают на значения «UV».
Я использую glDrawElements с GL_TRIANGLES для визуализации модели, используя «PolygonVertexIndices» в качестве GL_ELEMENT_ARRAY_BUFFER и"Вершины" как GL_ARRAY_BUFFER.Сама модель визуализируется правильно, но текстурирование далеко.
Поскольку я использую «PolygonVertexIndices» для GL_ELEMENT_ARRAY_BUFFER, насколько я понимаю, такая же индексация произойдет для массива атрибутов для UV-координат.Я не думаю, что OpenGL может использовать экспортированные UV-индексы, поэтому я создаю новый буфер для UV-значений размера 113958, который содержит соответствующие UV-значения, соответствующие PolygonVertexIndices.
Т.е. для вершины i в[0: 113958], я делаю
new_UVs[PolygonVertexIndices[i]] = UVs[UVIndices[i]]
и затем связываю new_UVs как массив атрибутов UV-координат.
Тем не менее, текстурирование явно неверно.Мое мышление не так?
Мне кажется, что я неправильно понимаю, как работать с УФ-буферами при использовании индексированного рендеринга OpenGL glDrawElements.Также кажется неправильным расширять мой UV-буфер, чтобы он соответствовал количеству вершин до 113958, поскольку преимущество glDrawElements должно заключаться в том, чтобы сохранять дублирующиеся значения вершин, а UV-буфер, вероятно, будет содержать дубликаты.
Было бы лучше выполнитьиндексирование и расширение «Вершин» и «UV» до размера 113958 и простое использование glDrawArrays с точки зрения производительности?
Любые мысли / идеи / предложения приветствуются.