【发布时间】:2011-02-11 09:02:16
【问题描述】:
因此,在 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 越南 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/1v/t/n 第一个数字是顶点数组的索引,第二个是 tex 坐标数组的索引,第三个是法线数组的索引。
因此,在尝试使用顶点缓冲区进行渲染时,
在 OpenGL 中,我可以使用 glVertexPointer、glNormalPointer 和 glTexCoordPointer 分别设置指向每个顶点、法线和纹理坐标数组的指针。但是当涉及到使用 glDrawElements 进行绘图时,我可以仅指定 ONE 组索引,即访问顶点时应使用的索引。
好的,然后呢?我还有 3 组索引要访问。
在 d3d 中几乎相同 - 我可以设置 3 个流:一个用于顶点,一个用于 texcoords,一个用于法线,但是在使用 IDirect3DDevice9::DrawIndexedPrimitive 时,我仍然只能指定 ONE 索引缓冲区,它将索引到顶点数组。
那么,是否可能为每个顶点、texcoord 和普通缓冲区(d3d 或 opengl!)使用不同的索引数组从顶点缓冲区中绘制,或者我必须创建单个交错数组然后访问它?
【问题讨论】: