opengl - 在 glDrawElements (OpenGL/VBO) 中对顶点和法线使用不同的数组

标签 opengl vbo

我目前正在 OpenGL 中编写 .obj 加载程序。我将顶点数据存储在 VBO 中,然后使用 Vertex Attribs 绑定(bind)它。对于正常人来说也是一样。问题是,法线数据和顶点数据的存储顺序不同。

我想,OpenGL 使用我为 glDrawElements 提供的用于渲染网格的索引来获取顶点 VBO 中的顶点并获取法线 VBO 中的法线。

除了使用glBegin/glVertex/glNormal/glEnd告诉glDrawElements使用顶点索引和法线其他索引之外,还有opengl方法吗? 谢谢

最佳答案

没有直接的方法可以做到这一点,尽管您可以通过索引到着色器内的缓冲区纹理(OpenGL 3.1 功能)来模拟它。

不过,通常不建议这样做。 OBJ 格式允许一个法线一次被多个(原则上任意数量)顶点引用,因此通常要做的事情是构造一个“完整”顶点,包括每个顶点的坐标、法线和纹理坐标(复制各自的数据) )。

这确保了
a) 平滑的阴影表面正确渲染
b) 硬边正确渲染

(两者之间的区别只是几个顶点共享相同的、相同的法线)

关于opengl - 在 glDrawElements (OpenGL/VBO) 中对顶点和法线使用不同的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509704/

相关文章:

linux - 如何启用 vtk "direct"硬件渲染,X11/Ubuntu 11.04 x86-64?

c++ - 如何在 OpenGl 中设置文本颜色

OpenGL 顶点数组/缓冲区对象

c++ - 排序子网格/VBO

opengl - 为什么我们需要 SPIR-V?

opengl - JOGL/OpenGL : "\n" (newline) does not working for text rendering

时间:2018-03-08 标签:c++opengl: sleep() does not affect glutPostRedisplay() during an animation

c++ - 将顶点缓冲区对象附加到顶点数组对象

java - 提高使用 VBO 时所需的内存

opengl - 处理 OpenGL VBO 中的死对象