1.输入头文件
#include<glad/glad.h>
#include<GLFW/glfw3.h>
#include<iostream>
2.初始化GLFW,告诉GLFW我们使用的主版本号和次版本号都是3,也就是告诉GLFW我们使用的OpenGL版本是3.3.告诉GLFW我们使用的模式是核心模式。
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
return 0;
}
3.创建GLFW窗口对象,窗口的长为800,宽为600,窗口标题为LearnOpenGL,存放所有和窗口相关的数据,将来会被GLFW的其他函数频繁引用。判断窗口是否创建,构建万一出错的输出。
GLFWwindow* window = glfwCreateWindow(800,600,"LearnOpenGL",NULL,NULL);
if(window == NULL)
{
std::cout << "failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
4.通知GLFW我们窗口的上下文设置为当前线程的主上下文.
glfwMakeContextCurrent(window);
5.初始化glad,用来管理OpenGL的指针。
if(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "faild to initialize glad << std::endl;
return -1;
}
6.告诉OpenGL渲染窗口的左下角位置坐标(-1到1之间),宽度和高度。
glViewport(0,0,800,600);
7.对窗口创建回调函数,使得窗口大小改变时视口随之调整。
void framebuffer_size_callback(GLFWwindow* window,int width,int height){
glViewport(0,0,width,height);
}
glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);
8.构建渲染循环(Render Loop)。
while(!glfwWindowShouldClose(window))
{
glfwPollEvents();//检查触发事件、更新窗口状态、调用回调函数
glfwSwapBuffers(window);//交换颜色缓冲
}
9.释放资源
glfwTerminate();
return 0;
10.加入输入控制。构建函数processInput如果按下escape键,结束循环。
void processInput(GLFWwindow *window)
{
if(glfwGetKey(window,GLFW_KEY_ESCAPE)== GLFW_PRESS)
glfwSetWindowShouldClose(window,true);
}
11.在构建的循环渲染中调用processInput函数
while(!glfwWindowShouldClose(window))
{
processInput(window);//输入
//渲染指令
glfwPollEvents();//检查调用事件
glfwSwapBuffers(window);//交换缓冲区
}
12.自定义颜色清空屏幕。调用glClear 函数清空屏幕颜色缓冲。glClear函数可以采用的缓冲位包含:
GL_COLOR_BUFFER_BIT:颜色缓冲
GL_DEPTH_BUFFER_BIT:深度缓冲
GL_STENCIL_BUFFER_BIT:模板缓冲
glClearColor(0.2f,0.3f,0.3f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
学习资料来自于:https://learnopengl-cn.github.io/01%20Getting%20started/03%20Hello%20Window/