我目前正在OpenGL中编写.obj加载程序.我将顶点数据存储在VBO中,然后使用Vertex Attribs绑定它.法线也是如此.事实上,普通数据和顶点数据不会以相同的顺序存储.
我想,我给glDrawElements渲染网格的索引是用OpenGL来获取顶点VBO中的顶点并在法线VBO中得到法线.
除了使用glBegin/glVertex/glNormal/glEnd告诉glDrawElements使用顶点索引和法线的其他索引之外,还有一种opengl方式吗?谢谢
虽然您可以通过在着色器内索引到缓冲区纹理(OpenGL 3.1功能)来模拟它,但没有直接的方法可以做到这一点.
但通常不建议做这样的事情.OBJ格式允许一次通过几个(原则上任意数量)顶点引用一个法线,因此通常要做的是构建一个"完整"顶点,包括每个顶点的坐标和法线和texcoords(复制相应的数据) ).
这样可以确保
a)平滑的阴影表面正确渲染
b)正确渲染硬边
(两者之间的差异只是几个顶点共享相同,相同的法线)