关于如何设置我的应用程序以将数据发送到着色器并进行绘制,我感到有点困惑。我知道我必须生成一个VAO,绑定它,生成缓冲区对象,绑定它们,用数据填充它并创建一个属性指针来引用缓冲区对象中的数据,因为openGL红皮书告诉我......但是我实际上并不知道这个过程中发生了什么。有人可以一步一步地解释这个过程,并解释发生了什么;为我和其他任何不太了解这个过程的人清除这一点。 VAO实际上做了什么?我知道我可以使用属性指针引用缓冲区对象中的数据,它可以正常工作,那么VAO中的重点是什么?
答案 0 :(得分:1)
顶点数组对象(VAO)是一个包含一组顶点缓冲区对象的对象,用于存储完整渲染对象或完整渲染批处理的信息。如果您不使用VAO,则每个批次都必须逐个绑定所有VBO。对于VAO中批处理中的所有VBO,您只需绑定VAO一次,而不是绑定所有VBO。
顶点缓冲区对象(VBO)是视频卡高速内存中的内存缓冲区,用于保存有关顶点的信息。 VBO可以存储法线,texcoords,顶点等信息。这就是为什么你必须让着色器使用属性指针知道VBO中的内容。 VBO比立即模式渲染提供了显着的性能提升,主要是因为数据驻留在视频设备内存而不是系统内存中,因此可以直接由视频设备呈现。
您必须绑定VBO或VAO以让OpenGL知道您将使用下一个绘制调用绘制的内容,或者您将使用某些VBO并告诉OpenGL准备好使用它们。