【(一)OpenGL入门】1.vs2022环境搭建及Hello窗口

目录

 1.环境搭建

1-1.下载GLFW

1-2.安装Cmake

1-3使用Cmake设置读取GLFW生成vs2022工程

1-4使用vs2022编译GLFW源码生成库文件

 1-5 配置GLAD

 2.Hello窗口


 1.环境搭建

自行安装vs2022/vs2019。

1-1.下载GLFW

GLFW是opengl的C库,需要使用该库进行编程。推荐下载GLFW源码包在vs2022中使用cmake工具进行编译,这样可以编译出适合自己操作系统和编译环境的GLFW库文件。

可在官网下载GLFW源码:Download | GLFW

1-2.安装Cmake

上面说到,要编译GLFW源码就得用到cmake工程管理工具,类似于linux环境下的makefile,有了它才能按照某种规则顺利编译源码。

在官网下载:Download | CMake

这里推荐下载.msi后缀文件,可以以GUI界面方式安装在电脑上。

安装好后桌面显示cmake图标。

1-3使用Cmake设置读取GLFW生成vs2022工程

使用vs2022编译代码得需要.sln工程,所以就需要先使用Cmake设置GLFW使其生成可以用vs2022打开的工程文件。

(1)解压glfw-3.3.8.zip到任意路径下,这里我放在自己创建的路径OpenGL_lib目录下。在glfw-3.3.8目录下创建一个文件夹build,用来存放配置生成的工程文件.sln。然后启动Cmake,按照如下图方式配置。

(2)出现下面打印信息就说明Cmake已经配置好了vs2022工程。从打印信息中可知该工程是根据自己的操作系统环境生成的。

1-4使用vs2022编译GLFW源码生成库文件

(1)在build目录下打开vs工程。

(2)点击生成解决方案。生成glfw3.lib,glfw帮助我们建立窗口,定义上下文、处理用户输入。

 (3)新建一个GLFW_LIB目录,在该目录下再创建include和lib目录。将glfw-3.3.8/include/GLFW/下的.h文件和glfw-3.3.8/build/src/Debug下的.lib文件分别拷贝到我们创建的include和lib目录下。

(4)打开vs2022,创建空的c++项目(非控制台项目);在解决方案栏右击选择属性->打开VC++目录->添加库路径:

 

添加头文件路径和上面方法一样,如此就可以使用include <GLFW/…>了。

(5)然后来链接库,添加依赖:注意:opengl32.lib是安装vs2022时默认安装的。

(6)最后写个程序测试一下环境。

 1-5 配置GLAD

安装编译glad,glad作用是为了把函数指针和显卡驱动里面的函数建立联系,因为各显卡厂商对于OpenGL标准的理解不同,写出来的驱动也不同。简单来说就是为了让我们的代码能在不同显卡厂家的设备上运行。glad只需要一行代码就可以解决本地函数指针到显卡驱动函数的映射。

(1)打开GLAD在线服务,按照下图选择,生成我们需要的版本包。

GLAD在线服务:https://glad.dav1d.de/

(2)下载.zip文件并解压。

(3)把include目录下的两个目录中的.h文件复制到之前的include文件中。

 

 (4)添加GLAD/src/下的glad.c文件到你的工程中,修改这两处头文件,具体得根据你的include目录,如果你的include目录下还有文件夹,那就得用人家源码的写法,我的.h直接复制到include目录中所以这样改。

 

 

(5)以上工作准备就绪后注释掉这行代码,否则编译报错。

 (6)写一段小程序测试环境搭建是否成功。

 2.Hello窗口

 之前搭建好的工程可以拷贝为以后编程使用,这里直接在之前环境搭建的工程上编程。

opengl.cpp

#include <glad.h>   //glad.h需要在glfw.h之前
#include <glfw3.h>
#include <iostream>

void framebuffer_size_callback(GLFWwindow* window, int width, int height);
void processInput(GLFWwindow* window);

int main()
{
    //初始化glfw:选择opengl 3.3~4.2核心模式,取决于你的显卡驱动
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

#ifdef __APPLE__                                                         //如果是苹果操作系统
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
#endif
	
    GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); //创建窗体对象:参数1:opengl窗口大小;参数2:窗口标题
    if (window == NULL)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();                                                
        return -1;
    }
    glfwMakeContextCurrent(window);                                     //设置当前窗口上下文设置为当前线程的上下文,之后才能在窗口进行绘制

    if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))            //glad:加载所有OpenGL函数指针,固定写法就这一行
    {
        std::cout << "Failed to initialize GLAD" << std::endl;
        return -1;
    }
    glViewport(0, 0, 600, 400);                                         //设置opengl实际渲染的区域大小;0,0为左下角坐标
    
    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);                                        //交换颜色缓冲(双缓冲):储存着GLFW窗口每一个像素颜色值作为输出显示在屏幕上
        glfwPollEvents();                                               //轮训检查输入设备触发事件
    }  
    glfwTerminate();                                                    //释放分配的所有glfw资源
    return 0;
}

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)              //按Esc键关闭界面
        glfwSetWindowShouldClose(window, true);
}

 运行效果

 原作:创建窗口 - LearnOpenGL CN

  • 32
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值