本项目是在学习 GAMES101:现代计算机图形学入门 自然而然的产物,包括作业,笔记,资源等。
主要分为两部分:理论和实践,理论包括 课程笔记 和 虎书(《Fundamentals of Computer Graphics》第四版)笔记。实践部分主要在该项目中,代码中有详细的注释。
课程本身是附带了一个 Linux 的虚拟机的,可以保证每个学员的环境都是一样的,但我是用的 Windows + VsCode 来完成的。下面介绍如何配置。 先完成这个 大佬 写的内容,如果觉得有用的话可以去给原地址给这个大佬点赞... 期间我遇到了一些问题,这里也都做了说明,希望对大家有帮助(如果有人看的话)。为了防止大佬的链接挂掉,所以我在这里记录了完整过程,里面绝大部分是复制的大佬的内容。
- 安装文件 CMake下载
- 安装的时候选择 Add CMake to the system PATH for all users,加入系统环境变量的路径,保证可以在命令行使用
- 命令行输入cmake --help,验证是否安装成功
- 安装文件 mingw下载
- 解压到任意地方,并且把bin的路径添加到系统环境变量PATH中
- 命令行输入g++ -v,验证是否安装成功
- 安装文件VSCode下载,安装完成以后安装对应插件
- C/C++,mirosoft
- Cmake, twxx
- Cmake Tool, mirosoft
- 下载地址 Eigen
- 解压到任意目录,eigen 的根目录下新建一个build目录
- 打开 cmake 软件,source目录设置成 eigen 的根目录,build 目录设置成刚刚新建的目录,然后点击 configure,出来的 makefile 的格式选择 mingw,等待 config 结束
- 点击 generate
- 管理员权限运行cmd,进入 build 目录,运行 mingw32-make,之后运行 mingw32-make install
- 删除解压出来的这个 eigen 目录(因为上面安装的已经安装到了 c 盘 Program File x86 里了,有时候 build 的时候会找错路径)
Clone 本项目,Windows 上 Vs Code 配置好 C++ 环境之后可以直接运行,不需要再下载 Eigen。
(额外说明:完成之后你会发现其实只需要使用 C:\Program Files (x86)\Eigen3\include\eigen3\Eigen
里面的文件,所以我已经把这里面的内容复制到了本项目,如果您是直接 Clone 的话,不需要再下载编译 Eigen 库,只需要在编码的时候注意找到 include 的里面的所需的头文件即可)
- 下载地址 Browse /opencv-win at SourceForge.net,安装说明 Installation in Windows
- 解压到任意目录,opencv/source/ 目录下新建一个 build 目录
- 打开 cmake 软件,source 目录设置成 opencv/source/ 目录,build目录设置成刚刚新建的目录,然后点击 configure,出来的 makefile 的格式选择 mingw,等待 config 结束
- 找到 OPENCV_ENABLE_ALLOCATOR_STATS,不勾选后面的对勾(不这样会编译错误), 再次点击 configure,之后点击 generate
- 管理员权限运行 cmd,进入 build 目录,运行 mingw32-make(这个很慢),之后运行 mingw32-make install
- 设置 opencv 的环境变量,管理员权限运行 cmd, 执行 setx -m OpenCV_DIR path_to_build/lib/,然后把 path_to_build/bin 添加到 path 系统环境变量里 (额外说明:之前用的低版本的 opencv,总是会出错,然后换成了最新版 4.5.2 的,就好了;刚安装好的 opencv 是自带 build 目录的,我是直接把他删掉,再按照上面的步骤来;如果在 mingw32-make 到 98% 的时候报了关于 python 的错,可以在 cmake 的时候去掉 BUILD_opencv_python)
完成了大佬的步骤之后,PATH 里面应该已经有了 CMake,MinGW 和 opencv。下面把新建一个 CC
变量,值为 gcc.exe 完整目录
;新建一个 CXX
变量,值为 g++.exe 完整目录
。
在 VsCode 中打开一个终端,在某一个 Assignment 下面新建一个文件夹叫做 Build,终端进入 Build。依次执行
cmake -G "MinGW Makefiles" ..
mingw32-make -j4
没有报错的话会在 build 目录出现一个可执行文件,运行即可。 (如果报了关于 OpenCV_DIR 的错,那可能是因为你在设置这个环境变量之前就打开了 VSCode 的终端,所以需要重开一下)
每一次作业都会在一个单独的 Assignment 文件夹中,Build 里面的东西我没删,在我自己的电脑上是每次都会被覆盖的,如果没有覆盖可以自己手动把 Build 里面所有的东西都删除。
主要就是搭建环境,然后自己探索一下。
1、基础:实现使用 AD 来控制三角形绕着 Z 轴旋转:
旋转矩阵和透视投影矩阵的写法可以参考 这篇。
2、进阶:实现绕着任意轴旋转三角形。注意,要加一下 if((size_t)ind >= frame_buf.size()) return;
不然自定义旋转轴的时候,三角形会转到屏幕外面去,就会数组越界。
1、基础:上面只是画了网格,现在为其填色,先找到这个三角形的 “边界”,然后遍历边界去比较该像素的中心点是否在三角形内部,如果在内部再进行深度测试。成果如下:
放大之后是这样的,锯齿比较明显:
2、使用多重采样的方法,也就是在一个像素点内取 4 个采样点,然后按照比例来上色,成果如下:
放大之后虽然还是有锯齿,但是比上面要好一点了: