作者:Anruoxia52 | 来源:互联网 | 2023-09-16 23:51
LearnOpenGL学习笔记(二)
1.基本步骤
在开始之前需要先了解下面三个概念:
- 顶点数组对象:Vertex Array Object,VAO
- 顶点缓冲对象:Vertex Buffer Object,VBO
- 索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO
想要用OpenGL绘制一个三角形需要非常多的步骤,总的来说分为四步。
- 进行常规的初始化,比如创建一个窗口对象
- 设置顶点(VBO与VAO)数据与缓冲,并配置顶点属性
- 建立着色器(vertexShader与fragmentShader)程序,并编译它
- 显示图像(渲染循环)
2.代码
对代码的具体解释都在注释中:
//注意要在包含GLFW的头文件之前包含了GLAD的头文件!
#include
#include
#include
using namespace std;//当用户改变窗口的大小的时候,视口也应该被调整,需要一个回调函数
void framebuffer_size_callback(GLFWwindow * window,int width,int height);
//声明一个函数用来检测特定的键是否被按下
void processInput(GLFWwindow * window);const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;//定义一个顶点着色器的源码
const char *vertexShaderSource = "#version 330 core\n"
"layout (location = 0) in vec3 aPos;\n"
"void main()\n"
"{\n""gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
"}\n\0";//定义一个片段着色器的源码
const char *fragmentShaderSource = "#version 330 core\n"
"out vec4 FragColor;\n"
"void main()\n"
"{\n"
" FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
"}\n\0";int main(){//初始化GLFWglfwInit();//将OpenGL主版本号(Major)和次版本号(Minor)都设为3glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//使用的是核心模式(Core-profile)glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//如果是macOS系统,则需要下面这行代码才能让配置起作用
#ifdef __APPLE__glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif//创建一个窗口对象GLFWwindow * window &#61; glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Hello,triangle", NULL, NULL);if (window &#61;&#61; NULL){cout <<"Failed to create GLFW window" <}void framebuffer_size_callback(GLFWwindow * window,int width,int height){//glViewport函数前两个参数控制窗口左下角的位置&#xff0c;第三个和第四个参数控制渲染窗口的宽度和高度glViewport(0,0,width,height);
}void processInput(GLFWwindow * window){//检查用户是否按下了返回键(Esc)&#xff08;如果没有按下&#xff0c;glfwGetKey将会返回GLFW_RELEASE&#xff0c;按下则为GLFW_PRESS)if (glfwGetKey(window, GLFW_KEY_ESCAPE) &#61;&#61; GLFW_PRESS) {glfwSetWindowShouldClose(window, true);}
}
运行结果如下图所示&#xff1a;