本系列博客为记录笔者在学习GAMES101课程时遇到的问题与思考。
- GAMES101:课程官网
- GAMES101:B站视频
- GAMES101:相关文件下载(百度网盘)
一、环境搭建
以下说明两种环境搭建方法,一种为用原视频所提及的VirtualBox一键搭建环境(但是我的环境下出现了一点问题无法解决),另一种是自建环境(我使用的是VMware软件进行搭建)。
1、VirtualBox搭建
首先下载网盘中的 ym_VirtualBox-6.1.4-136177-Win.exe 文件下载安装VirtualBox软件,再下载网盘中 GAMES101_Ubuntu 18.04.2 (64bit).zip 文件解压出对应的虚拟机映像 GAMES101_Ubuntu 18.04.2 (64bit).vdi ,再按照闫教授作业0中的 pa0.pdf 教程完成虚拟机的创建。
本节就粗略说一下自己遇到的问题:
- 按照闫教授的教程,创建完虚拟机,安装增强功能之后并进行相应设置之后,还是无法使用文件的拖放功能,每次拖入文件夹时只会创建在虚拟机之中创建一个空的文件夹
我查阅了许多相关资料还是无法解决该问题,不知道是虚拟机设置的问题还是软件安装的时候缺少了某些文件,不过经过测试我发现可以拖入文件,只是无法拖入一整个文件夹,所以我最后的解决方案:
- 自己手动创建文件夹之后,再手动拖入所有的文件
2、VMware搭建
本次搭建过程参考eine K1eine的博客,再次感谢 eine K1eine的教程!以此记录方便自己下次使用。
首先打开开篇提到的百度网盘,进入自建环境文件夹中,下载其中的所有三个文件:
- 虚拟机镜像文件: ubuntu-20.04.1-desktop-amd64.iso
- VScode安装文件:code_1.78.2-1683731010_amd64.deb
- OpenCV源文件:opencv-4.7.0.tar.gz
然后用该虚拟机镜像创建对应的Ubuntu虚拟机,此处不会的可以参考我之前的博客VMware虚拟机的下载与安装,把其中的第4步的window10镜像修改为本次下载的Ubuntu镜像。
创建完成后将code_1.78.2-1683731010_amd64.deb和opencv-4.7.0.tar.gz拖入虚拟机的Download文件夹中,并解压opencv-4.7.0.tar.gz文件到当前目录下。
双击code_1.78.2-1683731010_amd64.deb文件即可将VScode安装至虚拟机中。
随后参考eine K1eine的博客教程,先配置g++、cmake和eigen环境。
- g++ 配置
sudo apt-get -y install build-essential # 安装g++ g++ --version # 安装完成后检查版本
- cmake 配置
sudo apt-get -y install cmake #安装cmake cmake --version #照例检查版本
- eigen 配置
sudo apt-get -y install libeigen3-dev
配置完成三件套之后再配置OpenCV,进入刚刚解压完的目录下,右键在此处打开终端,依次输出以下命令
sudo mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
#通过八线程构建, 你也可以通过修改原来的数字进行构建
sudo make -j8
sudo make install
接下来配置环境变量
-
将库添加到系统路径
sudo gedit /etc/ld.so.conf
在文件最后一行添加
include /usr/local/lib
,因为makefile中默认opencv安装在该路径下的
然后进行更新sudo ldconfig
-
配置bash,修改bash.bashrc文件
sudo gedit /etc/bash.bashrc
在文件最后添加两行
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
如下所示:
保存退出,再更新一下源
source /etc/bash.bashrc
此时相关的环境就配置完成了
二、作业0解答
根据上述闫教授编写的 pa0.pdf 我们可以了解到一些Eigen库中关于向量/矩阵的创建、赋值和运算等操作,这里不熟悉的一定要仔细看一看,不然后面看代码就会一脸懵逼。
听课可知,一个向量可以用(x, y, 0)表示,而一个点可以用(x, y, 1)表示,对于作业0我们只需要先创建一个(2, 1, 1)的点,并按照 课件3:GAMES101_Lecture_03.pdf 中第28页关于旋转的操作编写对应的旋转矩阵即可。
即:
// rotate
Eigen::Vector3f p(2.0f,1.0f,1.0f);
Eigen::Matrix3f rotate45;
rotate45 <<
sqrt(2)/2, -sqrt(2)/2, 1,
sqrt(2)/2, sqrt(2)/2, 2,
0, 0, 0;
cout << rotate45 * p << endl;
先在 Assignment0中新建build文件夹,后进入该文件夹:
根据 pa0.pdf 中的内容可知在build文件夹中打开终端后每次编译都需要重新输入
cmake ..
make
./Transformation
所以新建一个run0.sh的脚本,里面的内容就是上面三条命令,这样每次执行只需要执行 run0.sh就行了,在build文件夹中打开终端
touch run0.sh
gedit run0.sh
chmod 777 run0.sh
并在脚本中加入
#/bin/bash
cmake ..
make
./Transformation
保存退出后运行
./run0.sh
若最后出现的结果是这样的,就代表运行正确: