当前位置:   article > 正文

【(一)OpenGL入门】1.vs2022环境搭建及Hello窗口_在vs中搭建opengl环境

在vs中搭建opengl环境

目录

 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

  1. #include <glad.h> //glad.h需要在glfw.h之前
  2. #include <glfw3.h>
  3. #include <iostream>
  4. void framebuffer_size_callback(GLFWwindow* window, int width, int height);
  5. void processInput(GLFWwindow* window);
  6. int main()
  7. {
  8. //初始化glfw:选择opengl 3.3~4.2核心模式,取决于你的显卡驱动
  9. glfwInit();
  10. glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
  11. glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
  12. glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
  13. #ifdef __APPLE__ //如果是苹果操作系统
  14. glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
  15. #endif
  16. GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); //创建窗体对象:参数1:opengl窗口大小;参数2:窗口标题
  17. if (window == NULL)
  18. {
  19. std::cout << "Failed to create GLFW window" << std::endl;
  20. glfwTerminate();
  21. return -1;
  22. }
  23. glfwMakeContextCurrent(window); //设置当前窗口上下文设置为当前线程的上下文,之后才能在窗口进行绘制
  24. if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) //glad:加载所有OpenGL函数指针,固定写法就这一行
  25. {
  26. std::cout << "Failed to initialize GLAD" << std::endl;
  27. return -1;
  28. }
  29. glViewport(0, 0, 600, 400); //设置opengl实际渲染的区域大小;0,0为左下角坐标
  30. glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); //注册窗口大小改变回调函数
  31. while (!glfwWindowShouldClose(window)) //检查一次GLFW是否被要求退出,循环一次就是刷新一帧
  32. {
  33. processInput(window);
  34. glClearColor(0.2f, 0.3f, 0.3f, 1.0f); //设置颜色:深绿色
  35. glClear(GL_COLOR_BUFFER_BIT); //刷新屏幕,使用设置的颜色
  36. glfwSwapBuffers(window); //交换颜色缓冲(双缓冲):储存着GLFW窗口每一个像素颜色值作为输出显示在屏幕上
  37. glfwPollEvents(); //轮训检查输入设备触发事件
  38. }
  39. glfwTerminate(); //释放分配的所有glfw资源
  40. return 0;
  41. }
  42. void framebuffer_size_callback(GLFWwindow* window, int width, int height) //窗口大小被改变就重新设置渲染区域大小
  43. {
  44. glViewport(0, 0, width, height);
  45. }
  46. void processInput(GLFWwindow* window)
  47. {
  48. if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) //按Esc键关闭界面
  49. glfwSetWindowShouldClose(window, true);
  50. }

 运行效果

 原作:创建窗口 - LearnOpenGL CN

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/318297
推荐阅读
相关标签
  

闽ICP备14008679号