Так, и в D3D и в OpenGL там способность потянуть из индексного буфера.
Формат файла Объекта однако делает что-то странное. Это указывает набор вершин как:
v -21.499660 6.424470 4.069845 v -25.117170 6.418100 4.068025 v -21.663851 8.282170 4.069585 v -21.651890 6.420180 4.068675 v -25.128481 8.281520 4.069585
Затем это указывает набор normals как..
vn 0.196004 0.558984 0.805680 vn -0.009523 0.210194 -0.977613 vn -0.147787 0.380832 -0.912757 vn 0.822108 0.567581 0.044617 vn 0.597037 0.057507 -0.800150 vn 0.809312 -0.045432 0.585619
Затем это указывает набор tex проводов как
vt 0.1225 0.5636 vt 0.6221 0.1111 vt 0.4865 0.8888 vt 0.2862 0.2586 vt 0.5865 0.2568 vt 0.1862 0.2166
ЗАТЕМ это указывает "поверхности" на модели как:
f 1/2/5 2/3/7 8/2/6 f 5/9/7 6/3/8 5/2/1
Где мы - v/t/n, первое число является индексом в массив вершин, второе индекс в tex coord массив, третье, в массив normals.
Так, в попытке представить это с буферами вершины,
В OpenGL я могу использовать glVertexPointer
, glNormalPointer
и glTexCoordPointer
установить указатели на каждую вершину, нормальную координату и координату текстуры выстраивает соответственно.. но когда это сводится к рисованию с glDrawElements
, Я могу только указать ОДИН набор индексов, а именно, индексы, которые он должен использовать при посещении вершин.
Хорошо, затем что? У меня все еще есть 3 набора индексов для посещения.
В d3d его почти такое же - я могу создать 3 потока: один для вершин, один для texcoords, и один для normals, но когда дело доходит до использования IDirect3DDevice9:: DrawIndexedPrimitive, я могу все еще только указать ОДИН индексный буфер, который индексирует в массив вершин.
Так, это возможный потянуть из буферов вершины с помощью различных индексных массивов для каждой вершины, texcoord, и нормальных буферов (ИЛИ d3d или opengl!), или я должен создать единственный чередованный массив и затем посетить IT?
OBJ не предназначен для сопоставления с OpenGL или DirectX.
Все, что вы сказали, правда, и нет, использовать индексы по атрибутам невозможно.
Вы должны преобразовать представление OBJ во что-то, что использует только один индекс для каждой вершины (возможно, дублируя некоторые данные вершины по пути).
То, что вы действительно хотите делать (говоря со стороны D3D, извините, OpenGL), - это загрузка OBJ в массив настраиваемого формата вершин - таким образом у вас есть структура с index, vertex, normal и tex координаты в нем, и вы можете просто визуализировать его с помощью одного DrawIndexedPrimtive.
Я неправильно понимаю ваше определение проблемы? Я думаю, вам нужно дать немного больше подробностей - вам не нужно использовать несколько индексных буферов для рендеринга одного файла OBJ (если вы не намеренно пакетируете его). Если это так, что вы намеренно пакетируете его, вам следует взглянуть на аргументы DrawIndexedPrimitive, которые позволяют вам указать смещение в VB для использования.