3 индексных буфера

Так, и в 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?

13
задан bobobobo 23 April 2010 в 04:20
поделиться

2 ответа

OBJ не предназначен для сопоставления с OpenGL или DirectX.

Все, что вы сказали, правда, и нет, использовать индексы по атрибутам невозможно.

Вы должны преобразовать представление OBJ во что-то, что использует только один индекс для каждой вершины (возможно, дублируя некоторые данные вершины по пути).

8
ответ дан 2 December 2019 в 00:45
поделиться

То, что вы действительно хотите делать (говоря со стороны D3D, извините, OpenGL), - это загрузка OBJ в массив настраиваемого формата вершин - таким образом у вас есть структура с index, vertex, normal и tex координаты в нем, и вы можете просто визуализировать его с помощью одного DrawIndexedPrimtive.

Я неправильно понимаю ваше определение проблемы? Я думаю, вам нужно дать немного больше подробностей - вам не нужно использовать несколько индексных буферов для рендеринга одного файла OBJ (если вы не намеренно пакетируете его). Если это так, что вы намеренно пакетируете его, вам следует взглянуть на аргументы DrawIndexedPrimitive, которые позволяют вам указать смещение в VB для использования.

2
ответ дан 2 December 2019 в 00:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: