文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用OpenGL创建窗口的示例详解

2024-04-02 19:55

关注

效果展示

在这里插入图片描述

窗口创建并启动渲染循环


#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创建窗口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯