Opengl 关于.obj三维模型格式和VBO

Opengl 关于.obj三维模型格式和VBO,opengl,vbo,.obj,Opengl,Vbo,.obj,在.obj模型中,v、vn和vt的数量是否相同?我这样问是因为我每次只能使用一个索引,所以我必须使用VBO struct VertexCoord { float x,y,z,w; float nx,ny,nz; float u,v; }; 所以我可以通过跨越偏移量为所有缓冲区使用一个索引 否,v、vt、vn的数量可能不同 请注意,这里有一个“v”列表,然后是“vt”、“vn”列表,等等 最后是一个面列表:1/2/3、4/5/4等。 面索引顶点位置、纹理坐标、法线,但由于这些索引彼此不相关,这也

在.obj模型中,v、vn和vt的数量是否相同?我这样问是因为我每次只能使用一个索引,所以我必须使用VBO

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

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

否,v、vt、vn的数量可能不同

请注意,这里有一个“v”列表,然后是“vt”、“vn”列表,等等

最后是一个面列表:1/2/3、4/5/4等。 面索引顶点位置、纹理坐标、法线,但由于这些索引彼此不相关,这也意味着vers的数量可能不同

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

这有点难以解释,但我希望你能理解这一点:)

因此,通常不能将obj数据直接映射到VBO结构中。 在OpenGL中,当然可以使用索引几何体,但这意味着对于特定顶点,每个属性都有一个索引。不能单独索引位置、纹理坐标。你必须以某种方式重新排列数据

以下是一些链接:


这有什么关系?你应该自己用从.obj加载的数据来构造一个VBO。但是我不能在绘制一个VBO时使用不同的索引吗?这就是我困惑的地方。我分别加载顶点,加载面后我不知道该做什么。也许加载后会根据面部数据重新排序,这样我就不需要使用glDrawArrays,因为我已经对列表进行了排序。我很困惑:/