games101-ComputerGraphic-H0虚拟机的搭建

3,096 阅读3分钟

虚拟机的搭建

本文为闫令琪大佬的games101课程课后作业学习,记录下学习过程
论坛网址:games-cn.org/forums/foru…

1 虚拟机环境搭建

1.1安装虚拟机

这里我们使用Oracle VM VirtualBox 虚拟机。

1.2下载虚拟硬盘

虚拟硬盘文件的下载地址为cloud.tsinghua.edu.cn/f/103133da1… 。下载完成后得到GAMES101_Ubuntu 18.04.2 (64bit).rar,将其解压后得到虚拟硬盘文件GAMES101_Ubuntu 18.04.2 (64bi t).vdi。

image.png

1.3配置虚拟机

打开Virtual Box,点击新建,设置类型为Linux,版本为Ubuntu-64 bit,建议设置虚拟机的内存大小为2GB,然后选择使用已有的虚拟硬盘文件,设置为之前解压得到的GAMES101_Ubuntu 18.04.2 (64bit).vdi,最后点击创建就完成了虚拟机的配置工作。

image.png 之后就可以使用创建好的虚拟机了,选中刚刚创建好的虚拟机,点击右侧上方的启动按钮就可以打开虚拟机了,Ubuntu 系统的密码为Ilovegraphics(注意是大写I)。

1.4安装Guest Additions

进入系统后,点击上方菜单的设备,点击安装增强功能,如下图所示。安装完成后,重启虚拟机系统就完成了Guest Additions 的安装

image.png

如果上面的方法安装失败了,可以使用ctrl+alt+t 调出终端,使用如下命令安装Guest Additions 功能
sudo mkdir –p /media/cdrom
sudo mount -t auto /dev/cdrom /media/cdrom/
cd /media/cdrom/
sudo sh VBoxLinuxAdditions.run

这就装好啦
image.png

接下来重启虚拟机系统

1.5作业框架的传输及编辑

作业框架的导入和导出有很多种方式,这里只提一种。当你在你的主机上下载好作业框架后,直接将其拖进虚拟机系统里。这里需要开启Virtual Box 的拖放功能:进入虚拟机系统后,点击上方菜单的设备,将拖放功能设置为双向即可。

将文件夹📂拖进去 image.png

2 作业框架说明

本部分将体现在样例程序main.cpp中

2.1 Elgen库使用注意事项

Eigen 是本课程使用的线性代数运算库,官方文档为eigen.tuxfamily.org

2.2 头文件

如样例程序main.cpp 所示,eigen 需要额外引入头文件<eigen3/Eigen/Core>

#include <eigen3/Eigen/Core>

2.3向量、矩阵

关于本部分内容,请详细阅读官方文档的矩阵部分eigen.tuxfamily.org/dox/group__… 以获得更全面、清晰的理解。
安装一下插件,运行得出结果

    // Example of vector
    std::cout << "Example of vector \n";
    // vector definition
    Eigen :: Vector3f v(1.0f,2.0f,3.0f);
    Eigen :: Vector3f w(1.0f,0.0f,0.0f);
    // vector output
    std::cout << "Example of output \n";
    std::cout << v << std::endl;
    // vector add
    std::cout << "Example of add \n";
    std::cout << v + w << std::endl;
    // vector scalar multiply
    std::cout << "Example of scalar multiply \n";
    std::cout << v * 3.0f << std::endl;
    std::cout << 2.0f * v << std::endl;

上述关于Vector的使用样例展示了如何定义一个三维浮点向量并且进行输出、加减、数乘,请自行根据数乘的形式与向量点积的形式探索点积的用法 image.png

3 作业

给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算)。

#include <cmath>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Dense>
#include <iostream>

int main(){
    Eigen::Vector3d test(2.0f,1.0f,1.0f);
    Eigen::Matrix3d rota;
    Eigen::Matrix3d tran;
    double theta = 45.0/180.0*M_PI;
    rota << cos(theta), -1.0*sin(theta), 0,
            sin(theta), cos(theta), 0, 
            0, 0, 1;
    tran << 1, 0, 1, 
            0, 1, 2, 
            0, 0, 1;
    test = tran * rota * test;
    std::cout << test << std::endl;
    std::cout <<  "After rotation and transform the point sits at " 
        << test[0] << "," << test[1] << std::endl;
    return 0;
}