GAMES101闫令琪图形学作业0(配置开发环境)

Posted hans774882968

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GAMES101闫令琪图形学作业0(配置开发环境)相关的知识,希望对你有一定的参考价值。

games101往期作业汇总帖下载作业0的压缩包。作业0是让你配环境的,很简单。

操作系统:VirtualBox虚拟机,Ubuntu20.04(比课程提供的虚拟硬盘版本更高!)

安装eigen和cmake

sudo apt-get install libeigen3-dev
sudo apt-get install cmake
cmake -version // 2022年2月10日:3.16.3

如果你的代码引用头文件时写了#include <Eigen/Dense>,那么还需要把Eigen下的所有文件和子目录复制到/usr/include。

sudo cp -r /usr/include/eigen3/Eigen /usr/include

参考:https://www.cnblogs.com/lihanwen/p/9928063.html

安装make

参考:https://www.cnblogs.com/kongbursi-2292702937/p/14863515.html

sudo apt-get update
sudo apt-get install ubuntu-make
sudo apt-get install make

安装gcc

sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gcc-multilib

注意makefile要求先安装gcc,而gcc如果没安装gcc-multilib就算没安装完全

编译运行

代码(main.cpp)
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Dense>
#include <iostream>
#include <cmath>
using namespace std;

double deg2rad (double v) 
    return v / 180.0 * M_PI;


void demos() 
    // Basic Example of cpp
    cout << "Example of cpp \\n";
    float a = 1.0, b = 2.0;
    cout << a << endl;
    cout << a / b << endl;
    cout << sqrt (b) << endl;
    cout << M_PI << endl;
    cout << sin (deg2rad (30.0) ) << endl;

    // Example of vector
    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
    cout << "Example of output \\n";
    cout << v << endl;
    // vector add
    cout << "Example of add \\n";
    cout << v + w << endl;
    // vector scalar multiply
    cout << "Example of scalar multiply \\n";
    cout << v * 3.0f << endl;
    cout << 2.0f * v << endl;

    // Example of matrix
    cout << "Example of matrix \\n";
    // matrix definition
    Eigen::Matrix3f i, j;
    i << 1.0, 2.0, 3.0, \\
      4.0, 5.0, 6.0, \\
      7.0, 8.0, 9.0;
    j << 2.0, 3.0, 1.0, \\
      4.0, 6.0, 5.0, \\
      9.0, 7.0, 8.0;
    // matrix output
    cout << "Example of output \\n";
    cout << i << endl;
    // matrix add i + j
    // matrix scalar multiply i * 2.0
    // matrix multiply i * j
    // matrix multiply vector i * v
    cout << j << endl;
    cout << (i * j) << endl;


void solve() 
    Eigen::Vector3d v (2.0, 1.0, 1.0);
    Eigen::Matrix3d rot, transform;
    // 绕原点逆时针转45°
    const double r = deg2rad (45);
    rot << cos (r), -sin (r), 0, \\
        sin (r), cos (r), 0, \\
        0, 0, 1;
    // 平移(1,2)
    transform << 1, 0, 1, \\
              0, 1, 2, \\
              0, 0, 1;
    v = rot * v;
    cout << "after rotate: " << v << endl;
    v = transform * v;
    cout << "after transform: " << v << endl;


int main() 
    demos();
    solve();
    return 0;

参考pa0.pdf给的命令即可,我这里很顺利。

mkdir build
cd build
cmake ..
make
./Transformation
  • 前两条命令是在项目根目录下执行的,后3条命令都是在项目根目录/build下执行的。显然后续再编译,从第3条命令开始即可。
  • build文件夹大小1MB左右,好大,让人难过。
  • 为什么可执行文件名叫Transformation?这个文件名是在CMakeLists.txt的add_executable中指定的。

作者:hans774882968

本文链接:https://blog.csdn.net/hans774882968/article/details/122858892

以上是关于GAMES101闫令琪图形学作业0(配置开发环境)的主要内容,如果未能解决你的问题,请参考以下文章

GAMES101-现代计算机图形学入门-闫令琪README

闫令琪GAMES101笔记 变换

游戏图形学入门知识整理

GAMES101&Fundamentals of Computer Graphics

辐射度量学简介

计算机图形学学习笔记——Whitted-Style Ray Tracing(GAMES101作业5讲解)