效果展示
窗口创建并启动渲染循环
#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);
}
// 让所有的输入代码保持整洁
void processInput(GLFWwindow *window) {
if (glfwGetKey(window,GLFW_KEY_ESCAPE) == GLFW_PRESS) {
glfwSetWindowShouldClose(window,true);
}
}
int main()
{
// 初始化GLFW
glfwInit();
// 配置GLFW
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);// 设置主版本号
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);// 设置次版本号
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 使用的是核心模式
//glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // MacOSX系统才需要设置
// 创建一个窗口对象
GLFWwindow* window = glfwCreateWindow(800,600,"LearnOpenGL",NULL,NULL);
if (window == NULL) {
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// GLAD是用来管理OpenGL的函数指针的,所以再调用任何OpenGL的函数之前我们需要初始化GLAD
// 我们给GLAD传入了用来加载系统相关的OpenGL函数指针地址的函数。GLFW给我们的是glfwGetProcAddress,它根据我们编译的系统定义了正确的函数
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) {
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
// 告诉OpenGL渲染窗口的尺寸大小,即视口大小
// OpenGL幕后使用glViewport中定义的位置和宽高进行2D坐标的转换、将OpenGL中的位置坐标转换为你的屏幕坐标。处理过的OpenGL坐标范围只为-1到1,然后映射到(0,800)和(0,600)
glViewport(0,0,800,600);// 设置窗口的维度
// 用户改变窗口的大小的时候,视口也应该被调整
// 对窗口注册一个回调函数(Callback Function)
glfwSetFramebufferSizeCallback(window,framebuffer_size_callback);
// 还可以将我们的函数注册到其它很多的回调函数中。例如我们可以创建一个回调函数来处理手柄输入变化,处理错误消息等。我们会在创建窗口之后,渲染循环初始化之前注册这些回调函数
// 添加渲染循环
while (!glfwWindowShouldClose(window)) {// 该函数在我们每次循环的开始前检查依次GLFW是否被要求推出,如果是的话函数返回true然后渲染循环便结束了,之后我们就可以关闭应用程序了
// 输入
processInput(window);
// 渲染指令
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);// 设置清空屏幕所用的颜色(此函数是一个状态设置函数)
glClear(GL_COLOR_BUFFER_BIT);// 清除颜色缓冲(是一个状态使用函数)
// 检查并调用事件,交换缓冲
glfwSwapBuffers(window);// 函数会交换颜色缓冲(它是一个储存着GLFW窗口每一个像素颜色值的大缓冲),它在这一迭代中被用来绘制,并且将会作为输出显示在屏幕上
glfwPollEvents();// 函数检查有没有触发什么事件(比如键盘输入、鼠标移动等)、更新窗口状态,并调用对应的回调函数(可以通过回调方法手动设置)。
}
glfwTerminate();
return 0;
}
参考资料
【1】LearnOpenGL
到此这篇关于使用OpenGL创建窗口的文章就介绍到这了,更多相关OpenGL创建窗口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!