资源
照例先放资源
百度网盘 https://pan.baidu.com/s/1yv_F5hfhE_bssp5zr-0FhQ 提取码:2utl
实验说明
本次作业的任务是填写一个旋转矩阵和一个透视投影矩阵。给定三维下三个点v0(2.0, 0.0,−2.0), v1(0.0, 2.0,−2.0), v2(−2.0, 0.0,−2.0), 需要将这三个点的坐标变换为屏幕坐标并在屏幕上绘制出对应的线框三角形(已经提供了draw_triangle 函数,所以你只需要去构建变换矩阵即可)。简而言之,我们需要进行模型、视图、投影、视口等变换来将三角形显示在屏幕上。其中视图和视口变换已经实现了,只需要实验模型和投影变换。
实验步骤
首先结合代码分析一哈明确要解决的问题:
模型变换
对应get_model_matrix函数
可以进行平移,旋转,缩放等操作,本次实验只要求实现绕z轴的旋转操作
那么旋转矩阵对应
[ c o s α − s i n α 0 0 s i n α c o s α 0 0 0 0 1 0 0 0 0 1 ] \begin{gathered} \begin{bmatrix} cos\alpha & -sin\alpha & 0 & 0 \\ sin\alpha & cos\alpha & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{gathered} ⎣⎢⎢⎡cosαsinα00−sinαcosα0000100001⎦⎥⎥⎤
这里有个注意的点是函数给的参数是角度而不是弧度,所以直接用的话会发现运行时按a和d旋转不对,注意做个转化:
π ∗ α / 180 \pi*\alpha/180 π∗α/180
投影变换
对应get_projection_matrix函数
首先分析一下参数:
eye_fov:垂直可视角度
aspect_ratio:长宽比
zNear和zFar: z轴的n,f
首先需要根据参数求出来l,r,b,t(具体推倒过程见lecture 5)
t