我可以使用 VAO 和VBO渲染一个三角形,代码如下
// reading shader source, compile it and link shader program
Shader shader("vertexShader.vs", "fragmentShader.fs");
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
unsigned VBO_ID;
unsigned VAO_ID;
glGenVertexArrays(1, &VAO_ID);
glBindVertexArray(VAO_ID);
glGenBuffers(1, &VBO_ID);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ID);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// render loop
while (!glfwWindowShouldClose(window))
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
shader.use();
processInput(window);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
glfwPollEvents();
}
上面的代码成功渲染了一个三角形。但是如何渲染这个三角形只使用VBO?如果我这样评论 VAO (glGenVertexArrays和glBindVertexArrays)的使用:
//glGenVertexArrays(1, &VAO_ID);
//glBindVertexArray(VAO_ID);
glGenBuffers(1, &VBO_ID);
glBindBuffer(GL_ARRAY_BUFFER, VBO_ID);
...
我什么也没有得到,只有一个只有背景颜色的窗口。如何只使用VBO渲染这个三角形。
OpenGL版本:3.3.0具有GLAD的核心配置文件上下文22.20.44.47.230323
1条答案
按热度按时间siv3szwd1#
你不需要。核心OpenGL 3.2+不允许不使用 VAO 进行渲染。就像它不允许在没有着色器的情况下渲染一样。