关于opengl使用的小心得
OpenGL 基础概念
VBO(数组缓冲对象)
- 用于存储顶点数据,如位置、颜色、法线、纹理坐标等。
- 作用是直接把数组存到 GPU 的缓存中,提高渲染效率。
IBO/EBO(索引缓冲对象)
- 用于存储索引数据,避免重复存储相同的顶点数据,提高渲染效率。
- 需要使用
create
/bind
/allocate
进行管理。
VAO(顶点数组对象)
- 作为管理者,记录 VBO 和 IBO 的绑定状态。
- 不需要在每次绘制时重新设置,可在不同 VAO 之间切换,以便绘制不同的对象。
- 只有
create
和bind
操作(用于成为管理者)。
顶点属性指针
- 用于告诉 OpenGL 顶点数据的格式,包括:
- 每个顶点有多少数据(如每个顶点包含多少个属性)。
- 每个属性占用多少个
GLFloat
。 - 该属性在 VBO 中的位置。
示例代码:
1 | shaderProgram.enableAttributeArray(0); // 启用顶点位置属性,对应顶点着色器中的 layout (location = 0) |
说明:这两句话相当于定义了两个指针,告诉着色器如何解析顶点数组。
OpenGL 着色器绑定规则
- OpenGL 只能同时使用一个着色器程序,使用时需要
bind
绑定某个着色器。 - VAO 也是同理,可以创建多个 VAO 来存储不同的对象(如矩形和三角形),但不能同时使用,需要绘制不同对象时,需重新
bind
另一个 VAO。
纹理映射
1 | uniform sampler2D ourTexture; |
用于获取 2D 纹理的像素值。
纹理过滤与旋转
- 将矩形扩展为立方体,并增加顶点坐标至 24 个,以支持 3D 纹理映射和旋转。
1 | // 立方体顶点数据(包含纹理坐标) |
1 | // 旋转矩阵(在片元着色器中应用) |
通过
glfwGetTime()
实现动态旋转。
评论