OpenGL1. 配置环境与窗口创建

该文介绍了如何配置OpenGL开发环境,包括使用GLAD和GLFW库创建窗口。在初始化GLFW后,设置OpenGL上下文版本为3.3核心模式,并创建窗口。接着,利用GLAD加载OpenGL函数指针,设置视口并创建渲染循环。此外,还涉及了按键处理函数,用于响应用户输入。最后,添加了清屏和渲染步骤。
摘要由CSDN通过智能技术生成

1. 配置环境,创建项目

https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/

配置环境:按照教程一步一步配置,没有出现bug。注意cmake和visualstudio都是最新版本。并且,创建了一个专门存放lib和include的文件夹:D:\develop\opengl library,把这个文件夹的include和lib文件夹放入项目的配置下。

主要配置了两个库:GLAD和GLFW。

创建项目:直接创建一个空项目。

GLFW:一个OpenGL第三方库。用来创建OpenGL上下文,操作窗口。
GLAD:用来访问OpenGL规范接口的第三方库。

2. 窗口创建

2.1 引入头函数

#include <glad/glad.h>
#include <GLFW/glfw3.h>

2.2 初始化GLFW函数

//----- 以下都是写在main函数里------
// 初始化GLFW
glfwInit(); 
// 关于glfwWindowHint参数的选项在:https://www.glfw.org/docs/latest/window.html#window_hints
// 参数GLFW_CONTEXT_VERSION_MAJOR:明确客户端API的版本,对context的内容有影响
// Major:主版本为3,MINOR:次版本号为3
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
​
// GLFW_OPENGL_PROFILE:定义OpenGL模式(profile),使用的是核心模式。( core)
// (创建opengl上下文)
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

2.3 创建窗口对象

// 参数:宽,高,窗口名称
// 会返回一个GLFWwindow对象
GLFWwindow*window=glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window==NULL)
{
    std::cout<<"Failed to create GLFW window"<<std::endl;
    glfwTerminate();
    return-1;
}
// 通知GLFW将窗口的上下文设置为当前线程主上下文。
glfwMakeContextCurrent(window);

2.4 GLAD

功能:用来管理openGL的函数指针。

// GLFW给的:glfwGetProcAddress
// 判断是否正确初始化了GLAD
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
    std::cout<<"Failed to initialize GLAD"<<std::endl;
    return-1;
}

2.5 viewport创建

// 设置渲染尺寸的大小。
// 前两个:左下角位置,后两个:宽高
glViewport(0, 0, 800, 600);
// 回调函数:每次窗口大小被调整时调用。把viewport设置得和窗口一样大,自适应。
voidframebuffer_size_callback(GLFWwindow*window, intwidth, intheight);
​
voidframebuffer_size_callback(GLFWwindow*window, intwidth, intheight)
{
    glViewport(0, 0, width, height);
}
// 注册回调函数,让回调函数知道什么时候被调用:窗口大小改变的时候(framebuffer_size_callback)
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
​
OpenGL坐标范围是-1~1,就是把这个范围映射到viewport设置的0-800,0-600范围。

2.6 保持窗口一直开着

开一个渲染循环(render loop)

while(!glfwWindowShouldClose(window))
{
    // 交换颜色缓冲
    glfwSwapBuffers(window);
    // glfwPollEvents检查有没有触发什么事件。
    glfwPollEvents();    
}

2.7 释放资源

glfwTerminate();
return 0;

完成了窗口创建到显示的整个过程。

如下:

3. 判断按键

输入要一个单独的函数来实现。这里的输入包括:按键是否被按下。

voidprocessInput(GLFWwindow*window)
{
    // GLFW_KEY_ESCAPE:esc键
    if(glfwGetKey(window, GLFW_KEY_ESCAPE) ==GLFW_PRESS)
        // 关闭GLFW的方法
        glfwSetWindowShouldClose(window, true);
}
​
//判断操作要在每个循环里都判断,所以放在while循环里。
while (!glfwWindowShouldClose(window))
{
    processInput(window);
​
    glfwSwapBuffers(window);
    glfwPollEvents();
}

4. 加上渲染

// 使用四个参数,分别是红色分量、绿色分量、蓝色分量、alpha分量。表示的是比重。0.2表示红色透过0.2. alpha分量是透明度。
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
// 指定清空的缓冲是颜色缓冲。
glClear(GL_COLOR_BUFFER_BIT);

渲染加在:判断按键之后,缓冲图像之前。

渲染之前要做:清空屏幕。

一些拓展

OpenGL Extension Viewer下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值