Games101-作业一: 旋转与投影

模拟一个基于CPU的光栅化渲染器的简化版本

作业要求: 需要我们填充MVP变换中的M(模型变换)和P(投影变换)

get_model_matrix()函数:

由作业框架中给出的注释得知, 需要创建用于围绕 Z 轴旋转三角形的模型矩阵

直接套用如下公式:

完整代码如下:   (注意弧度rotation_angle与角度的换算)

get_projection_matrix()函数:

由作业框架中给出的注释得知, 用给定参数创建透视投影矩阵

相关参数解析:

t, b, l, r, n, f 各对应上、下、左、右、近、远平面, 公式中的这些参数表示原点距离平面的距离, 例如: t=-b , l=-r

正交投影矩阵公式如下:

透视变正交投影矩阵公式如下:

 透视投影矩阵 == 正交投影矩阵 乘以 透视变正交矩阵

注意事项: 求出t , r

给出的参数中有 eye_fov(垂直可视角度), aspect_ratio(宽高比), zNear(相机与近平面的距离), zFar(相机与远平面的距离)

下图中通过 zNear / eye_fov 的三角关系得出 \frac{1}{2}height, 也就是我们需要求的原点与上平面的距离(t)

用aspect_ratio * t得出 r.

完整代码如下:

提高项

这里使用的是第三节课讲的罗德里格旋转公式(Rodrigues' rotation formula)

完整代码如下:

get_rotation(围绕axis这条轴, 旋转angle度)

写好了被调用的函数, 现在就差调用接口没有设置了

我比较省事(其实就是懒哈哈哈), 所以直接用原来的接口, 直接替换参数

main()函数: (只改变划线处)

因为上面围绕的是x轴, angle还是框架中的按一下增加10或者减少10

效果图:

默认状态

按了两下D, 绕x轴旋转了-20°

 按了6下A, 绕x轴旋转了60°

关于框架的理解, 这是这次作业必须要完成的, 但是本人比较懒, 做得时候没有记录下来, 导致全忘了

贴上我觉得解释得不错的知乎博文:

GAMES101-作业1详解 - 第二型面积分的文章 - 知乎

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值