GAMES101-ASSIGNMENT1(作业1)

        本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点 v0 (2.0, 0.0, −2.0), v1 (0.0, 2.0, −2.0), v2 (−2.0, 0.0, −2.0), 你需要将这三个点的坐标变换为屏幕坐标,并在屏幕上绘制出对应的线框三角形 (在代码框架中,我们已经提供了 draw_triangle 函数,所以你只需要去构建变换矩阵即可)。简而言之,我们需要进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。在提供的代码框架中,我们留下了模型变换和投影变换的部分给你去完成。如果你对上述概念有任何不清楚或疑问,请复习课堂笔记或在论坛上提问。以下是你需要在 main.cpp 中修改的函数(请不要修改任何函数名和其他已经填写好的函数,并保证提交的代码是能编译运行的):

  • get_model_matrix(float rotation_angle): 逐个元素地构建模型变换矩阵并返回该矩阵。在此函数中,你只需要实现三维中绕 z 轴旋转的变换矩阵,而不用处理平移与缩放。
  •  get_projection_matrix(float eye_fov, float aspect_ratio, float zNear, float zFar): 使用给定的参数逐个元素地构建透视投影矩阵并返回该矩阵。

Eigen::Matrix4f get_view_matrix(Eigen::Vector3f eye_pos)
{
    Eigen::Matrix4f view = Eigen::Matrix4f::Identity();

    Eigen::Matrix4f translate;
    translate << 1, 0, 0, -eye_pos[0], 0, 1, 0, -eye_pos[1], 0, 0, 1,
        -eye_pos[2], 0, 0, 0, 1;

    view = translate * view;

    return view;
}

Eigen::Matrix4f get_model_matrix(float rotation_angle)
{
    Eigen::Matrix4f model = Eigen::Matrix4f::Identity();
    Eigen::Matrix4f ml ;
    ml << cos(rotation_angle),sin(rotation_angle),0,0,
    -sin(rotation_angle),cos(rotation_angle),0,0,
    0,0,1,0,
    0,0,0,1;

    // TODO: Implement this function
    // Create the model matrix for rotating the triangle around the Z axis.
    // Then return it.
    model = ml*model;

    return model;
}

Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio,
                                      float zNear, float zFar)
{
    // Students will implement this function

    Eigen::Matrix4f projection = Eigen::Matrix4f::Identity();

    // TODO: Implement this function
    // Create the projection matrix for the given parameters.
    // Then return it.
    Eigen::Matrix4f pj;
    pj << 1/(tan(eye_fov/2)),0,0,0,
    0,aspect_ratio*(1/tan(eye_fov/2)),0,0,
    0,0,-(zNear+zFar)/(zFar-zNear),-(2*zNear*zFar)/(zFar-zNear),
    0,0,-1,0;
    projection = pj*projection;

    return projection;
}

 运行

如果使用虚拟机并用 CMake 进行编译,请在终端(命令行)输入以下内容:
1 mkdir build // 创 建build文 件 夹 以 保 留 的 工 程 文 件。
2 cd build // 进 入build文 件 夹。
3 cmake .. // 通 过 提 供CMakeLists.txt文 件 的 路 径
4 // 作 为 参 数 来 运 行CMake。
5 make -j4 // 通 过make编 译 代 码, -j4 表 示 通 过4个
6 // 内 核 进 行 并 行 化 编 译。
7 ./Rasterizer // 运 行 代 码

 

结果:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值