配置opengl环境方面:需注意把glfw和glad的.h文件所在文件夹路径正确copy进VS项目的包含目录中,lib文件所在文件夹路径放入库目录,还有链接库也要加上。
主要是创建窗口的流程,从初始化窗口到设置窗口和视口再到渲染,理论和操作简单
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#include <iostream>
//回调函数,当窗口改变时视口也改
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
//检查是否触发Esc,触发则关闭窗口
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
int main()
{
//实例化GLFW窗口
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);// OpenGL主版本号
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);// OpenGL副版本号
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//表示上下文使用的OpenGL配置文件
//创建一个窗口对象
GLFWwindow* window = glfwCreateWindow(800, 600, "ALin", NULL,NULL);
if (window = NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
//初始化GLAD,用来管理
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout<<"Failed to initialize GLAD"<<std::endl;
return -1;
}
glViewport(0, 0, 800, 600);//视口
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);//注册窗口回调函数
//实现窗口的渲染循环
while (!glfwWindowShouldClose(window))//在每次循环开始前检查一次GLFW是否被要求退出
{
//输入
processInput(window);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓冲,并将屏幕设置为上面的颜色
glfwSwapBuffers(window);//检查有没有触发事件(如键盘输入、鼠标移动)
glfwPollEvents();//交换颜色缓冲
}
glfwTerminate();//释放资源
return 0;
}