返回
点亮OpenGL世界:绘制三角形
前端
2023-12-28 06:51:32
OpenGL教程(三):绘制你的第一个三角形
在之前的教程中,我们了解了如何创建一个基本的OpenGL窗口。现在,我们将迈出激动人心的一步:绘制我们的第一个三角形!在3D图形的世界中,三角形是构建所有其他形状的基石。
为OpenGL做好准备
在绘制三角形之前,我们需要为OpenGL做好准备。首先,我们要创建一个顶点着色器和一个片段着色器,这些着色器负责将我们的三角形从3D空间转化为屏幕上的像素。
顶点着色器
#version 330 core
layout (location = 0) in vec3 aPos;
void main() {
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
这个顶点着色器简单地将顶点的位置传递给OpenGL的内置变量gl_Position
,它决定了顶点在屏幕上的位置。
片段着色器
#version 330 core
out vec4 FragColor;
void main() {
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
这个片段着色器为每个片段(像素)设置了颜色。在这种情况下,我们绘制的是一个红色的三角形。
编译和链接着色器
接下来,我们需要编译和链接着色器程序:
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
glCompileShader(vertexShader);
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
glCompileShader(fragmentShader);
GLuint shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
构建三角形
现在我们有了着色器程序,我们可以开始构建我们的三角形。我们将使用OpenGL的glBuffer
和glVertexAttribPointer
函数来定义三角形的顶点:
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLuint VBO, VAO;
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);
这段代码创建了顶点数组对象(VAO)和顶点缓冲对象(VBO),并将顶点数据绑定到VBO。最后,它使用glVertexAttribPointer
函数将VBO中的数据关联到着色器程序中的顶点属性。
渲染三角形
最后,我们需要渲染三角形:
glUseProgram(shaderProgram);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 3);
这个调用激活了我们的着色器程序,绑定了VAO,并使用glDrawArrays
函数绘制三角形。
总结
恭喜!你现在已经成功地绘制了你的第一个OpenGL三角形。这是进入3D图形世界的一个重要一步。随着你不断探索OpenGL,你的图形学技能将突飞猛进。