2013-02-19 103 views
0

v,vn和vt的数量在.obj模型中是否相同?我问,因为我只能用每绘图一个索引,所以我有使用VBO关于.obj 3d模型格式和VBO

struct VertexCoord 
{ 
float x,y,z,w; 
float nx,ny,nz; 
float u,v; 
}; 

,所以我可以通过跨越偏移使用一个索引所有的缓冲区。

+0

为什么要回事?您应该自己从.obj加载的数据构建一个VBO。 – 2013-02-19 11:12:56

回答

1

不,v,vt,vn的数量可以不同。

通知,有“V”的列表,然后选择“VT”,“VN”等列表...

在年底有脸的列表:1/2/3, 4/5/4等 表面索引顶点pos,纹理坐标,法线,但由于这些索引彼此不相关,这也意味着vers的数量可能不同。

只有当脸部列表看起来像“1/1/1”,“4/4/4”时,我们才会有相同的属性。

这是一个有点棘手解释,但我希望你能:)

所以一般不能直接OBJ数据映射到您的VBO结构的地步。 在OpenGL中,您当然可以使用索引几何,但这意味着每个特定顶点的所有属性都有一个索引。你不能分别索引位置,纹理坐标。你必须以某种方式重新排列数据。

这里有一些链接:

http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Load_OBJ

http://xiangchen.wordpress.com/2010/05/04/loading-a-obj-file-in-opengl/

+0

但我不能在绘制一个VBO时使用不同的索引?这就是我困惑的地方。我加载顶点分开,我不知道加载面后要做什么。也许根据装载后的脸部数据重新排序,然后我不需要使用glDrawArrays,因为我已经订购了清单。我很困惑:/ – deniz 2013-02-19 15:35:41

+0

我已经编辑了一些我以前的答案 – fen 2013-02-19 18:04:14