现代opengl和传统opengl的简单代码对比
时间: 2023-09-16 09:06:31 浏览: 53
传统OpenGL(固定管线)的代码:
```c++
#include <GL/glut.h>
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5, -0.5, 0);
glVertex3f(0.5, -0.5, 0);
glVertex3f(0, 0.5, 0);
glEnd();
glFlush();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutCreateWindow("OpenGL Test");
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
现代OpenGL(可编程管线)的代码:
```c++
#include <GL/glew.h>
#include <GLFW/glfw3.h>
int main() {
glfwInit();
GLFWwindow* window = glfwCreateWindow(640, 480, "OpenGL Test", NULL, NULL);
glfwMakeContextCurrent(window);
glewInit();
float vertices[] = {
-0.5, -0.5, 0,
0.5, -0.5, 0,
0, 0.5, 0
};
GLuint VAO, VBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
while (!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
```
可以看到,现代OpenGL的代码比传统OpenGL的代码更加复杂和冗长,但同时也更加灵活和可扩展。传统OpenGL的代码使用了固定管线,只能进行简单的图形渲染,而现代OpenGL的代码使用了可编程管线,可以实现更加复杂的图形渲染和计算。