我试图在顶点数组对象 (VAO) 中使用两个顶点缓冲区对象 (VBO) 和两个索引缓冲区对象 (IBO) 来渲染来自包含 3D 模型的波前 .Obj 文件的数据。.obj 文件使用顶点/法线定义:
f v1//vn1 v2//vn2 v3//vn3
我意识到我不能使用两个 IBO 来对 OpenGL 的 VAO 进行索引,因为(一次)只能将一个缓冲区对象绑定到 GL_ELEMENT_ARRAY_BUFFER 绑定目标。这意味着我不能只定义顶点位置索引和顶点法线索引,当我需要两者作为 GLSL 顶点着色器的输入时,这是一个问题。
我考虑过使用“顶点”结构来封装顶点位置和顶点法线,但我不知道如何将数据作为一个长数组提供给 OpenGL,并且当我在不同对象中拥有所有顶点位置数据时。我想我可以使用一些循环将数据复制到包含所有位置数据的新数组中。
加载 .obj 文件时,我想我可以处理数据,以便法线与相应的顶点位置值匹配。
我应该如何解决这个问题?
我正在使用带有 OpenGL 3.3 的 C++ 和 Visual Studio 2012。