Итак, как в 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
Затем он определяет группу текстовых координат, например
* 1010.*
THEN он определяет "грани" в модели, например:
f 1/2/5 2/3/7 8/2/6
f 5/9/7 6/3/8 5/2/1
Где мы v / t / n первое число - это индекс в массиве вершин,второй - индекс в массиве координат координат, третий - в массиве нормалей.
Итак, пытаясь отрендерить это с помощью буферов вершин,
В OpenGL я могу использовать glVertexPointer
,glNormalPointer
и glTexCoordPointer
для установки указателей на каждый из координатных массивов вершин, нормалей и текстур соответственно ... но когда дело доходит до рисования с glDrawElements
, я могу указать только ONE набор индексова именно индексы, которые он должен использовать при посещении вершин.
Хорошо, тогда что?У меня до сих пор есть 3 наборов индексов для посещения.
В d3d все то же самое - я могу настроить 3 потока: один для вершин, один для текстовых координат и один для нормалей, нокогда дело доходит до использования IDirect3DDevice9 :: DrawIndexedPrimitive, я все еще могу указать только ONE индексный буфер, который будет индексировать в массив вершин.
Итак, возможно ли рисовать из буферов вершин, используя разные индексные массивы для каждого из буферов вершин, texcoord и нормальных (EITHER d3d или opengl!), или я должен создать один массив с чередованием и затем посетить IT?