OpenGL 学习笔记 1

我志向学习游戏客户端开发,在此之前已经有了2年左右的业余Unity开发经验。现在升上大学,我想我也应该有时间去学习更为进阶的内容了。因此我准备通过自学OpenGL来写一个小的游戏引擎,来学习Shader与游戏引擎构架。 由于学习笔记对于我来说是对我不容易记住的东西进行补充说明与个人理解,因此不会说的非常详细,仅仅是对参考资料的一个补充。 话不多说,下面就是我的笔记正文。 参考资料 目前参考资料是: LearnOpenGL CN 一个非常好用的OpenGL入门教程网站,必看。 OpenGL Wiki OpenGL的官方文档,够正的。 OpenGL是什么 OpenGL是一个图形库(而且也仅仅是一个图形库,没有输入、声音和窗口管理的库函数),其本质是通过一套开源标准,让硬件与软件得以连接的API。现代显卡都支持OpenGL API。 OpenGL API本质上是一个状态机,因此我们需要在OpenGL每一次绘图之前对OpenGL的参数进行配置,才能让图形如我们所愿。(因此OpenGL也提供了一种参数的简记手段) 由于OpenGL本质上是一套开源标准,因此显卡真正的运行时API与OpenGL API必定不同,OpenGL需要在运行时对实际调用显卡的API进行重定向。这就导致了OpenGL的运行效率会有损失。 GLFW与GLAD 之前提到过OpenGL是没有Input和Audio之类的功能,甚至连在操作系统下创建窗口的功能都没有,因此我们需要额外的库来做支持。GLFW就是做这些事情的一个库了。GLFW实现了系统环境支持,为应用提供了一套很好用的库,关键是它也是跨平台的。 那么GLAD是干什么的呢?GLAD的功能在于为OpenGL提供了重定向功能,使之可以调用到显卡中具体的操作函数(上面提到过了!) 开发环境配置 我之前没有学过C++,因此我这次尝试使用C++来学习OpenGL。学习OpenGL的同时也学会了C++,岂不美哉。 我具体的开发环境是macOS Big Sur(arm64) + Clang + Clion。我尝试使用教程中的做法来自己编译运行库,但是最后终归失败。 最后我使用了homebrew来导入运行库: brew install glfw 安装完成后,我们可以在 /opt/homebrew/Cellar/ 下找到我们的glfw。 接下来按照LearnOpenGL的说法,去 https://glad.dav1d.de 下载glad后,构建项目目录结构如下所示: ProjectRoot |- CMakeLists.txt |- src // 放置本项目源代码 |- includes // 放置头文件 |- libs // 放置引用库 将glad解压缩后,分别把内容中的include和lib放在我们项目中的对应目录。接下来,我们编写CMakeList如下所示: cmake_minimum_required(VERSION 3.20) project(LearnOpenGL) set(CMAKE_CXX_STANDARD 11) # 设置变量 set(GLFW_HOME "/opt/homebrew/Cellar/glfw/3.3.4") # 设置头文件目录 include_directories("${GLFW_HOME}/include") include_directories(/include) # 添加 GLFW3 预编译库 add_library(glfw SHARED IMPORTED) SET_TARGET_PROPERTIES(glfw PROPERTIES IMPORTED_LOCATION "${GLFW_HOME}/lib/libglfw....

2021/10/27 · Ca2didi