关于 .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文件

iPhone Cheetah 3D OpenGL ES 顶点缓冲对象 (VBO) 示例

OBJ(3D模型)文件格式

OBJ(3D模型)文件格式

如何将 .obj 转换为 .json 格式的 3D 模型?

3D模型文件 OBJ格式模型详细介绍