Итак, как в D3D, так и в OpenGL есть возможность рисовать из буфера индекса.
Формат файла OBJ, однако, делает что-то странное. Он задает кучу таких вершин, как:
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
Затем он задает связку нормалей типа..
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-координате массив, третий, в массив нормалей.
Итак, пытаясь сделать это с помощью вершинных буферов,
В OpenGL я могу использовать glVertexPointer
, glNormalPointer
и glTexCoordPointer
для установки указателей на каждый из массивов координат вершин, нормалей и текстур соответственно.. но когда дело доходит до рисования с помощью glDrawElements
, я могу только укажите ОДИН набор индексов, а именно индексы, которые он должен использовать при посещении вершин.
Хорошо, тогда что? У меня есть 3 набор индексов для посещения.
В d3d все то же самое - я могу настроить 3 потока: один для вершин, один для texcords и один для нормалей, но когда дело доходит до использования IDirect3DDevice9:: DrawIndexedPrimitive, я могу указать только ONE, который будет индексироваться в массив вершин.
Итак, возможно ли рисовать из вершинных буферов с использованием разных массивов индексов для каждого из вершинного, texcoord и обычного буферов (EITHER d3d или opengl!), или я должен создать один чередующийся массив, а затем посетите ИТ?