赞
踩
目录
自行安装vs2022/vs2019。
GLFW是opengl的C库,需要使用该库进行编程。推荐下载GLFW源码包在vs2022中使用cmake工具进行编译,这样可以编译出适合自己操作系统和编译环境的GLFW库文件。
可在官网下载GLFW源码:Download | GLFW
上面说到,要编译GLFW源码就得用到cmake工程管理工具,类似于linux环境下的makefile,有了它才能按照某种规则顺利编译源码。
在官网下载:Download | CMake
这里推荐下载.msi后缀文件,可以以GUI界面方式安装在电脑上。
安装好后桌面显示cmake图标。
使用vs2022编译代码得需要.sln工程,所以就需要先使用Cmake设置GLFW使其生成可以用vs2022打开的工程文件。
(1)解压glfw-3.3.8.zip到任意路径下,这里我放在自己创建的路径OpenGL_lib目录下。在glfw-3.3.8目录下创建一个文件夹build,用来存放配置生成的工程文件.sln。然后启动Cmake,按照如下图方式配置。
(2)出现下面打印信息就说明Cmake已经配置好了vs2022工程。从打印信息中可知该工程是根据自己的操作系统环境生成的。
(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)最后写个程序测试一下环境。
安装编译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)写一段小程序测试环境搭建是否成功。
之前搭建好的工程可以拷贝为以后编程使用,这里直接在之前环境搭建的工程上编程。
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);
- }

运行效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。