GAMES101作业环境配置及实现


GAMES101

GAMES101 作业 1-7 VS 环境配置和实现

作业实现源码:GAMES101 作业 1-7 实现代码

安装 Eigen

官网:http://eigen.tuxfamily.org/index.php?title=Main_Page

下载最新的 zip 后解压

解压出来的文件夹名称应该是 eigen-version,为了和作业 include 对应,重命名为 eigen3。

安装 OpenCV

官网:https://opencv.org/releases/

下载最新版安装即可。

安装完成后添加环境变量 ...\include\opencv\build\x64\vc16\bin

VS 项目环境设置

安装 eigen3 和 opencv 库之后,做如下设置。

新建一个 C++空项目。

打开项目属性,进行如下设置。

VC++目录 –> 包含目录

D:\APP\CPPOpenSouceLib    新建eigen3文件夹的上级目录(注意不是eigen3文件夹)
D:\APP\opencv\build\include

VC++目录 –> 库目录

D:\APP\opencv\build\x64\vc16\lib

链接器 –> 输入 –> 附加依赖项

opencv_world480d.lib

调试环境 –> 环境

PATH=D:\APP\opencv\build\x64\vc16\bin

重复配置

新建一个项目之后又要重复配置,非常麻烦,可以参考下面的链接,但是 调试环境 –> 环境 的路径,还是需要自己配。

https://blog.csdn.net/weixin_45410343/article/details/108987053

GAMES101 作业 8 的 VS 环境配置和实现

作业实现源码:GAMES101 作业 8 实现代码

配置 VS2019 环境

  1. 创建一个空的 C++工程,我这里创建的工程名字为 Games101Work8

  2. 把作业 8 里面给的两个文件夹 CGLsrc 拷贝到项目中。

    图1
  3. 进入 CGL 文件夹,并创建一个 build 文件夹。

    图2
  4. 打开 cmd,将路径切换刚刚创建到 build 文件夹下。输入命令 cmake ..(需要自行安装配置好 cmake,并且在执行的过程中中可能会提示没有找到 FREETYPE_LIBRARYFREETYPE_INCLUDE_DIRS),执行成功后会在 build 文件夹下生成一个可编译的工程。我这里是生成的 VS2019 的工程。

图3
  1. 如果出现没有找到 FREETYPE_LIBRARYFREETYPE_INCLUDE_DIRS 的情况,就需要自己安装 Freetype 库。可以从 这里 下载压缩包,我下载的版本是 2.13.2,压缩包为 ft2132.zip。下载解压后,进入 freetype-2.13.2\builds\windows\vc2010 目录下,打开 freetype.sln 工程,进行编译。编译完成后的 libdllfreetype-2.13.2\objs\x64\Debug 目录下。
图4 图5
  1. 打开作业 8 工程的 CGL 文件夹下的 CMakeLists.txt,添加如下两行代码,FREETYPE_LIBRARY 路径是刚刚生成的 freetype.lib 文件的路径,FREETYPE_INCLUDE_DIRS 则是 Freetype 头文件所在的路径。
// 修改路径为自己的freetype路径
set(FREETYPE_LIBRARY "D:/APP/CPPOpenSouceLib/freetype-2.13.2/objs/x64/Debug")
set(FREETYPE_INCLUDE_DIRS "D:/APP/CPPOpenSouceLib/freetype-2.13.2/include")
图6
  1. 回到 CGL\build 路径下,将刚刚生成失败的时候产生的文件全部删除掉,重新执行 cmake ..。此时应该会正常生成一个 VS 工程。
图7 图8
  1. 打开在 CGL\build 文件夹中生成 CGL.sln。将 osdfont.c 文件后缀修改为 osdfont.h,若不修改会在编译的时候出现 C1060:编译器堆内存不足的报错(我试过把虚拟内存增大,但还是会占满所有内存)。修改之后同时需要把 osdtext.h 文件中的 extern "C" char osdfont_base64[]; 代码注释掉,并加上 #include "osdfont.h"

    图9
  2. 右键 CGL 工程点击 属性,然后 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 ,添加 _USE_MATH_DEFINESGLEW_STATIC,最后点击菜单栏 生成 -> 生成解决方案。这样就把 CGL 编译好了。

    • _USE_MATH_DEFINES:需要使用到了 M_PI 等定义,只有定义了该宏才可用。
    • GLEW_STATIC:编译 glew 需要打开该宏,否则当使用 CGL.lib 的时候,引用 glew 库会出现 LNK2019: 无法解析的外部符号。
图10 图11
  1. 打开作业 8 的工程,然后将作业 src 目录的代码包括在项目中。
图12
  1. #include <unistd.h> 报错的问题可参考这篇博客:vs19 下无法找到 unistd.h 头文件

  2. getopt 未定义问题可参考这篇博客 getopt 未定义问题

  3. 由于用了 M_PIPI_OVER_2 等,所以在这个工程同样也需要右键 Games101Work8 工程点击 属性,然后 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 ,添加 _USE_MATH_DEFINES

图13
  1. 接下来配置 VC++目录 下的 包含目录库目录
图14
  1. 首先编辑包含目录,需要添加 freetype 目录下面的 include 文件夹,以及 CGL 目录下面的 include 文件夹。
图15
  1. 然后编辑库目录,这里需要配置各个 .lib 文件所在的文件夹,分别需要添加 freetype.libglfw3.libCGL.libglew.lib 所在的目录。这里的路径看起来比较乱,需要仔细查看各个路径。
图16
  1. 配置各个 lib 的名字,编辑 链接器 -> 输入 -> 附加依赖项,分别添加下面几个 lib 库(opengl32.lib 为自带的,其他几个你都可以在上一步配置库目录的文件夹中能找到)。
freetype.lib
glew.lib
CGL.lib
glfw3.lib
opengl32.lib
图17 图18
  1. 编辑 配置属性 -> 调试 -> 环境,添加 freetype 的 freetype.dll 所在的路径,在上面的步骤中有提到过他的位置,他与 freetype.lib 在同一级目录下。注意一定要写成 path=你的路径,不要有多余的空格。
path=D:\APP\CPPOpenSouceLib\freetype-2.13.2\objs\x64\Debug
图19 图20
  1. 到这里就完成所有的配置了,点击生成解决方案并运行,没有任何报错运行出来就成功了。接下来就可以愉快的编写代码了。
图21

VS2022 一键自动配置(未验证)

我在配置环境的过程中看到一个 VS2022 的自动一键配置环境的仓库,但是由于我没有 VS2022 所以就懒得去折腾这个了,如果有 VS2022 可以看一下该仓库(不确定能否正确运行出来)。

GitHub 仓库地址:一键配置 GAMES101 作业框架及运行环境(含答案)

参考

关于 opengl 相关库 GLFW 与 GLEW 的问题

无法链接 glew 的解决办法

基于 Visual Studio 2019 的 OpenGL 的安装和环境配置

getopt 未定义问题

GAMES101课程介绍

GAMES101: 现代计算机图形学入门课件


文章作者: 草莓多多
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 草莓多多 !
  目录