gamas101 hw1

作业简介

本次作业的内容主要是构建模型变换矩阵透视投影矩阵,提高部分实现一个可以绕过原点的任意轴旋转的变换矩阵(基础部分实现的模型变换矩阵只能实现绕x,y,z轴旋转)。

作业代码

模型变换矩阵

Eigen::Matrix4f get_model_matrix(float rotation_angle)

{

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



    // TODO: Implement this function

    // Create the model matrix for rotating the triangle around the Z axis.

    // Then return it.

    model << cos(rotation_angle/180.0*MY_PI),-1.0 * sin(rotation_angle/180.0*MY_PI),0,0,

                sin(rotation_angle/180.0*MY_PI),cos(rotation_angle/180.0*MY_PI),0,0,

                0,0,1,0,

                0,0,0,1;

    return model;

}

透视投影矩阵

参数含义
eye_fov垂直可视角
aspect_ratio宽高比
zNear距离 Camera 较近的边界
zFar距离 Camera 较远的边界
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.

    float t = zNear * tan(eye_fov/2.0/180.0*MY_PI);

    float b = -t;

    float r = aspect_ratio * t;

    float l = -r;

    Eigen::Matrix4f Mtranslate;

    Mtranslate << 1,0,0,-(l+r)/2,

                  0,1,0,-(t+b)/2,

                  0,0,1,-(zNear+zFar)/2,

                  0,0,0,1;

    Eigen::Matrix4f Mscale;

    Mscale << 2/(r-l),0,0,0,

              0,2/(t-b),0,0,

              0,0,2/(zNear-zFar),0,

              0,0,0,1;

    Eigen::Matrix4f Mprep;

    Mprep << zNear,0,0,0,

             0,zNear,0,0,

             0,0,zNear+zFar,-1.0 * zNear * zFar,

             0,0,1,0;

    projection = Mtranslate * Mscale * Mprep;

    return projection;

}

提高部分

主要是通过课上的公式实现,将值计算出来一个一个带入就好。公式中α为要旋转的角度,n为所要绕的轴(默认过原点)。
在这里插入图片描述

在这里插入图片描述

运行结果

按住a或者d可以左右旋转图像。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值