OpenGL / C++ 学习笔记(一) 搭设环境

OpenGL / C++ 学习笔记(一) 搭设环境

  • OpenGL / C++ 学习笔记
    • 关于OpenGL
    • 学习路线
    • 关于库的介绍、下载和安装,以及环境配置
      • 手动环境配置(示例编译器:vs2019)
        • 第一步 下载相关文件
        • 第二步 编译glfw
        • 第三步 准备之后会常用到的OpenGL需要的开发文件夹include、lib
        • 第四步 新建项目
        • 第五步 测试环境是否配置成功
      • 环境变量设置

OpenGL / C++ 学习笔记

汇总页

关于OpenGL

OpenGL属于较低层的图形渲染相关库,负责向显卡提供绘制画面所需的、从建模顶点到画面处理的数据信息和编程脚本(可编程渲染管线),但与其它底层的图形库不同,OpenGL实际上是一个底层的图形渲染规范\标准,由1992年成立的OpenGL架构评审委员会(ARB)维护【百度百科】,因此各显卡和平台的对它的具体实现可以是不同的。

学习路线

OpenGL是一个庞大且用途多样的图形库,涉及知识点和函数较多,对刚接触图形学的新手而言零基础直接啃《OpenGL超级宝典》(俗称蓝宝书)或《OpenGL编程指南》(又叫红宝书(虽然中文版是墨绿色的封皮=-=))其实是不太适合的。
这边推荐新手先食用相较下会简单点的learnopengl提供的入门教程【中文翻译的教程网址】(由于教程是放在gayhub上,所以可能需要魔法上网,或者食用官方英文版教程),或者EA小哥的导向引擎开发的C++和GL系列入门视频【比比汗丽丽上的搬运视频链接】
等到看完上面两者之一后才食用书本是比较明智的选择。

关于库的介绍、下载和安装,以及环境配置

手动环境配置(示例编译器:vs2019)

第一步 下载相关文件

glfw官网下载(官网也有glfw的相关文档)(选择下载源文件(source package))
cmake官网下载(编译glfw源码用)
glad官网下载
freeglut和glew的网址我给忘了(毕竟之后用的glfw没用过glut),以后可能会补上吧

第二步 编译glfw

打开cmake之后在第一栏选择之前下好且解压后的glfw源码文件夹,第二栏选好编译目标文件夹
OpenGL / C++ 学习笔记(一) 搭设环境_第1张图片
点击左下角的Configure按钮,会出来以下界面
OpenGL / C++ 学习笔记(一) 搭设环境_第2张图片
第一栏选择对应的编译器,下面的不用管他,默认的就好,点击Finish
OpenGL / C++ 学习笔记(一) 搭设环境_第3张图片
OpenGL / C++ 学习笔记(一) 搭设环境_第4张图片
等待出现第二个界面之后不用勾选任何东西(通常情况下),点击Generate开始生成文件,读条结束后在我们一开始选择的第二栏(编译目标文件夹)中就会出现对应编译器版本的glfw库工程的文件了。(如下图所示)

OpenGL / C++ 学习笔记(一) 搭设环境_第5张图片

然后我们点击打开上图文件夹中的.sln(解决方案)文件,点击生成>生成解决方案,待生成完毕,在项目文件夹的\src\Debug文件夹中可得到我们接下来需要的.lib(库)文件。
OpenGL / C++ 学习笔记(一) 搭设环境_第6张图片
OpenGL / C++ 学习笔记(一) 搭设环境_第7张图片

第三步 准备之后会常用到的OpenGL需要的开发文件夹include、lib

我们将一开始解压后拿去给cmake编译的GLFW-x.x.x文件夹中的include目录下的GLFW文件夹复制到新建的include中,下载好的glad所解压得到的文件夹中include目录下的两个文件夹glad和KHR复制,粘贴到这个新的include文件夹中;
将编译好的GLFW库(之前提到的debug和release文件夹)复制到lib文件夹下(由于我们刚刚只用debug模式对glfw进行了编译所以只有deubug文件夹,如果换作release再进行一次编译之前glfw项目的\src文件夹下就会有debug和release两个文件夹了)。
OpenGL / C++ 学习笔记(一) 搭设环境_第8张图片
OpenGL / C++ 学习笔记(一) 搭设环境_第9张图片

第四步 新建项目

在vs2019中新建c/c++的空项目,点击项目—>属性
OpenGL / C++ 学习笔记(一) 搭设环境_第10张图片
然后在vc++这栏找到包含目录(include)
OpenGL / C++ 学习笔记(一) 搭设环境_第11张图片
选择自己刚刚整理好的include文件夹(注:$(SolutionDir)是vs的特殊指令,指代项目目录,可用于不同电脑上的项目转移避免项目因为绝对地址问题打开失败)

然后选择库目录(lib)栏,选择自己刚刚整理好的lib文件夹(不同的配置(见下图左上角)(debug、release)选择对应的文件夹)
OpenGL / C++ 学习笔记(一) 搭设环境_第12张图片
然后,点击链接器,选择输入标签,在附加依赖项中加入opengl32.lib;glfw3.lib;两项,Debug和Release模式下名字是一样的,因此和include一样,可以在左上角为所有配置选项下配置。
OpenGL / C++ 学习笔记(一) 搭设环境_第13张图片
配置完成,点击应用以保存设置。

最后,将之前放在include中的glad.c文件包含在项目中(如果vs界面里的项目文件夹中出现了,就右键点击选择包含在项目中,如果没有,右键空白处选择添加现有项,选择glad.c)。

OpenGL / C++ 学习笔记(一) 搭设环境_第14张图片

这样我们的项目设置就完成了。

第五步 测试环境是否配置成功

项目中新建cpp文件;

在文件中输入以下代码:

// OpenGL基本库
#include 
#include 

// 报告错误用
#include 

// 窗口回调函数,每当窗口大小属性被修改时该函数被回调,参数即为该窗口新的大小
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
 // 未来会添加内容
}

// 事件检测函数
void process_Input(GLFWwindow* window)
{
 // 未来会添加内容
 if (glfwGetKey(window,GLFW_KEY_ESCAPE) == GLFW_PRESS) // 按键检测,检测esc键是否按下
 {
  glfwSetWindowShouldClose(window,true);    // 设置对应窗口应该被关闭
 }
}

int main()
{
 // !初始化glfw窗口
 glfwInit();
 glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);     // 指定OnencL的主版本号(和glad版本对应)
 glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);     // 指定OpenGL的子版本号(和glad版本对应)
 glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 设置使用OpenCL的核心模式(可编程渲染管道的模式)
 //创建窗口
 GLFWwindow* window = glfwCreateWindow(720, 720, "LearnOpenGL", NULL, NULL); // 参数含义:窗口宽,窗口高,窗口名称,窗口附加,窗口依赖,如果新建窗口失败返回NULL指针
 if (window == NULL)            // 如果出错,则退出程序
 {
  std::cout << "Failed to create GLFW window" << std::endl; // 报错信息
  glfwTerminate();           // 终止窗口进程
  return -1;
 }
 glfwMakeContextCurrent(window); // 将窗口的上下文环境设置为当前主线程的上下文环境 
 // !初始化glad
 if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))  // 如果加载失败,退出程序
 {
  std::cout << "Failed to initialize GLAD" << std::endl;  // 报错信息
  return -1;
 }
 // 注册窗口回调函数
 glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);

 glClearColor(1.0f, 1.0f, 0.0f, 1.0f); // 设置清屏颜色为黄色

 // 渲染循环
 while (!glfwWindowShouldClose(window)) // 检测窗口是否该关闭
 {
  process_Input(window);    // 处理输入事件

  glClear(GL_COLOR_BUFFER_BIT);  // 清屏
  glfwSwapBuffers(window);   // 将显示缓存和离屏缓存交换(显示离屏缓存中的内容)
  glfwPollEvents();     // 检查是否有事件触发(例如鼠标输入和键盘输入事件)
 }
 glfwTerminate();      // 终止进程
 return 0;
}

如果环境配置成功则上述代码能成功运行,就会打开一个赛博朋克2077标配(大误) 黄色的图形界面窗口
(此时按下esc键就会被检测到并退出程序)

恭喜你现在成功进入了OpenGL无限可能的世界

OpenGL / C++ 学习笔记(一) 搭设环境_第15张图片

环境变量设置

有的人可能觉得每次新建OpenGL项目都得配置项目环境很麻烦,想要通过给系统配置环境变量来一步到位,在这篇文章里我就不赘述这些方法了,可以移步百度(bushi

(PS:我个人推荐把include和lib扔到每一个项目里通过“”调用,这样保证换不同电脑上时能快速运行,不需要再次配置环境或者环境(比如GLFW或者GLAD的版本)不一样导致项目打不开

下一篇: OpenGL/C++ 学习笔记(二)图形渲染相关概念

你可能感兴趣的:(OpenGL入门笔记,c++,学习,笔记,图形渲染)