Как работать с индексами COLLADA?

Я написал простую читалку для файлового формата COLLADA, и вроде работает нормально. Теперь у меня есть экспортированная из Blender сетка куба, которая разделена по ребрам и триангулирована, поэтому у нее должно быть 12 треугольников (2 на грань), 24 вершины (4 на грань) и 36 индексов (6 на грань). Эта сетка также имеет данные нормалей и UV-карты.

Файл COLLADA имеет 24 вершины, 12 нормалей и 36 UV, поэтому я предполагаю, что нормали относятся к треугольнику, а UV - к индексу. Счетчик polylist для треугольников равен 12, что правильно, а vcount имеет двенадцать троек, так что это тоже правильно. Теперь <p>, который является списком индексов, имеет 108 записей, где 0, 3, 6 и т. Д. - это индексы вершин, 1, 4, 7 и т. Д. - нормальные индексы, а 2, 5, 8 и т. Д. - UV-индексы.

У меня есть внутренняя структура для вершин, которая состоит из позиции (vec3), нормали (vec3) и координаты UV (vec2). Для рисования сеток я использую буферы вершин OpenGL и имею отдельный список индексов.

Дело в том, что после загрузки меша у меня должно быть 24 вершины? 108 записей в <p> переводятся в 36 вершин. В чем проблема с индексами?

Возможно, мне здесь не хватает чего-то очень простого, но я просто не могу этого увидеть.

Файл COLLADA находится здесь.


person manabreak    schedule 16.02.2013    source источник


Ответы (1)


Ладно, я нашел решение, пришлось очистить разум простым самолетом. Поскольку каждая грань представляет собой треугольник, окончательное количество вершин в три раза превышает количество, указанное в атрибуте count полилиста. Итак, для куба это было 36, а не 24. В конце концов, 36 действительно правильно рисует куб. Так что, в основном, просто мой мозг сходил с ума.

person manabreak    schedule 16.02.2013