关于 .obj 3d 模型格式和 VBO
Posted
技术标签:
【中文标题】关于 .obj 3d 模型格式和 VBO【英文标题】:About .obj 3d model format and VBO 【发布时间】:2013-02-19 10:16:14 【问题描述】:.obj 模型中 v、vn 和 vt 的数量是否相同?我问它是因为我每次抽奖只能使用一个索引,所以我可以使用 VBO
struct VertexCoord
float x,y,z,w;
float nx,ny,nz;
float u,v;
;
所以我可以通过跨步偏移为所有缓冲区使用一个索引。
【问题讨论】:
这有什么关系?您应该自己从从 .obj 加载的数据构造一个 VBO。 【参考方案1】:不,v,vt,vn的数量可以不同。
注意有一个“v”列表,然后是“vt”、“vn”等列表......
最后有一张面孔列表:1/2/3、4/5/4 等。 Faces 索引顶点 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/
【讨论】:
但我不能在绘制一个 VBO 时使用不同的索引?这就是我感到困惑的地方。我分别加载了顶点,我不知道加载面后该怎么做。也许在加载后根据面部数据重新排序,然后我不需要使用 glDrawArrays 因为我已经排序了列表。我很困惑:/以上是关于关于 .obj 3d 模型格式和 VBO的主要内容,如果未能解决你的问题,请参考以下文章
我的OpenGL学习进阶之旅关于3D模型知识之:什么是obj文件和mtl文件