3个索引缓冲区

bob*_*obo 13 opengl 3d direct3d

因此,在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 coords

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,glNormalPointerglTexCoordPointer以指针设置为每个顶点的,正常和纹理坐标分别阵列..但是当它归结到与绘画glDrawElements,我只能指定组指标,即它访问时,应该使用索引顶点.

好的,那又怎样?我还有3套索引要访问.

在d3d它大致相同 - 我可以设置3个流:一个用于顶点,一个用于texcoords,一个用于法线,但是当涉及到使用IDirect3DDevice9 :: DrawIndexedPrimitive时,我仍然只能指定一个索引缓冲区,它将索引进入顶点数组.

那么,是否可以使用不同的索引数组为每个顶点,texcoord和普通缓冲区(EITHER d3d或opengl!)绘制顶点缓冲区,或者我是否必须创建一个交错数组然后访问IT?

Bah*_*bar 8

OBJ不是为了映射到OpenGL或DirectX而设计的.

你说的一切都是真的,不,不可能使用每个属性索引.

您必须将OBJ表示转换为每个顶点仅使用一个索引的东西(可能在整个过程中复制一些顶点数据).