OpenGL的glfw创建一个VBO并且每段代码加上注释
时间: 2024-05-13 19:08:22 浏览: 121
首先需要了解VBO(Vertex Buffer Object)是OpenGL中用于存储顶点数据的一种缓存对象。它可以将顶点数据存储在显存中,以加快渲染速度。
下面是使用glfw创建一个VBO的代码示例,并加上注释:
```c++
#include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
// 初始化glfw
if (!glfwInit())
return -1;
// 创建窗口
window = glfwCreateWindow(640, 480, "VBO Example", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
// 将窗口设置为当前上下文
glfwMakeContextCurrent(window);
// 定义顶点数据
float vertices[] = {
-0.5f, -0.5f,
0.5f, -0.5f,
0.0f, 0.5f
};
// 创建一个VBO对象
GLuint vbo;
glGenBuffers(1, &vbo);
// 绑定VBO对象
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// 将顶点数据复制到VBO中
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 渲染循环
while (!glfwWindowShouldClose(window))
{
// 清空屏幕
glClear(GL_COLOR_BUFFER_BIT);
// 绘制三角形
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
// 交换缓冲区
glfwSwapBuffers(window);
// 处理事件
glfwPollEvents();
}
// 释放VBO对象
glDeleteBuffers(1, &vbo);
// 终止glfw
glfwTerminate();
return 0;
}
```
注释已经添加在代码中,可以帮助理解每一步的作用。需要注意的是,这里使用的是静态绘制方式(GL_STATIC_DRAW),也就是顶点数据只会被复制一次,并且多次渲染都会使用这些数据。如果需要动态更新VBO中的数据,可以使用其他绘制方式,例如GL_DYNAMIC_DRAW。
阅读全文