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
,glNormalPointer
并glTexCoordPointer
以指针设置为每个顶点的,正常和纹理坐标分别阵列..但是当它归结到与绘画glDrawElements
,我只能指定一组指标,即它访问时,应该使用索引顶点.
好的,那又怎样?我还有3套索引要访问.
在d3d它大致相同 - 我可以设置3个流:一个用于顶点,一个用于texcoords,一个用于法线,但是当涉及到使用IDirect3DDevice9 :: DrawIndexedPrimitive时,我仍然只能指定一个索引缓冲区,它将索引进入顶点数组.
那么,是否可以使用不同的索引数组为每个顶点,texcoord和普通缓冲区(EITHER d3d或opengl!)绘制顶点缓冲区,或者我是否必须创建一个交错数组然后访问IT?
OBJ不是为了映射到OpenGL或DirectX而设计的.
你说的一切都是真的,不,不可能使用每个属性索引.
您必须将OBJ表示转换为每个顶点仅使用一个索引的东西(可能在整个过程中复制一些顶点数据).