Games101作业答案:作业1

本文档详细介绍了如何构建一个光栅化器,包括模型变换(绕Z轴旋转)、视角变换(平移操作)和透视投影变换。代码示例中给出了矩阵运算的具体实现,包括从透视投影到正交投影的转换,并考虑了宽高比和视角角度。此外,还提供了一个高级任务,即实现绕任意轴的旋转。在主函数中,演示了如何使用这些变换绘制三角形,并允许通过键盘输入调整旋转角度。

作业1,第一个正式作业,做出一个rasterizer(光栅化器),粗浅的说就是把一个空间上的物体显示在屏幕上,闫老师那边已经给我们做出来框架,需要我们补充的是:

  1. 模型变换函数,这里指三角形绕Z轴旋转的旋转变换
  2. 视角变换函数,这里指将模型放置在给出的人眼位置的平移操作
  3. 透视投影变换函数,这里指将原z轴处的模型投影到近z处的[-1,1]^3

前两个分别代入绕Z轴的旋转矩阵和平移变换矩阵即可,最后一个稍有难度,根据课程我们已知透视投影变换需先做从透视投影到正交投影的变换①,再做正交投影变换②。根据函数给出的参数,①对应的矩阵很好写出,但是②矩阵需要计算r,l,t,b,便需要利用宽高比ratio和可看角度fov进行计算,如下图所示,可以自行推导一下,详见下方代码:

另有一提高作业,绕任一过原点轴旋转,这个需要利用老师之前所讲的任意轴旋转的旋转公式,要注意的是,该公式给出的旋转矩阵是3x3的,需要对第四列、第四行单独赋值。

#include "Triangle.hpp"
#include "rasterizer.hpp"
#include <eigen3/Eigen/Eigen>
#include <iostream>
#include <opencv2/opencv.hpp>

constexpr double MY_PI = 3.1415926;

Eigen::Matrix4f get_view_matrix(Eigen::Vector3f eye_pos)
{
    Eigen::Matrix4f view = Eigen::Matr
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值