aPe*_*Man 2 c++ opengl glsl .obj
我试图在顶点数组对象(VAO)中使用两个顶点缓冲区对象(VBO)和两个索引缓冲区对象(IBO)来渲染包含3D模型的波前.Obj文件中的数据..obj文件使用顶点/正常面定义:
f v1//vn1 v2//vn2 v3//vn3
Run Code Online (Sandbox Code Playgroud)
我意识到我无法使用两个IBO来使用OpenGL的VAO进行索引,因为只有一个缓冲区对象(一次)可以绑定到GL_ELEMENT_ARRAY_BUFFER绑定目标.这意味着我不能只定义顶点位置索引和顶点法线索引,当我需要两者作为GLSL顶点着色器的输入时,这是一个问题.
我想过使用封装顶点位置和顶点法线的"顶点"结构,但我不知道如何将数据作为除了一个长数组之外的任何东西提供给我,并且当我将所有顶点位置数据放在不同的对象中时.我想我可以使用一些循环将数据复制到包含所有位置数据的新数组.
加载.obj文件时,我想我可以处理数据,以便法线与相应的顶点位置值匹配.
我该如何解决这个问题?
我正在使用C++和Visual Studio 2012与OpenGL 3.3.
你必须要理解的一点是,"顶点"与"位置"不是同义词.顶点是整个属性集; 位置,法线,纹理坐标等.OpenGL一次处理几何一个基元,其中基元由1(点),2(线)或3个顶点(三角形)组成.你不能单独处理位置和正常,他们总是必须一起去.
在OpenGL中处理它之前,必须扩展.obj文件中的数据.对于每个唯一的属性元组,引入一个带有新索引的新顶点,并用.obj替换索引顶点OpenGL所需的索引属性.