作业1
问题描述
问题分析:
第一个函数:
get_model_matrix(float rotation_angle):
逐个元素地构建模型变换矩阵并返回该矩阵。在此函数中,你只需要实现三维中绕 z 轴旋转的变换矩阵,而不用处理平移与缩放。
绕 z 轴旋转的变换矩阵:
double r = rotation_angle / 180.0 * acos(-1);
rotate << cos(r), -1.0f*sin(r), 0, 0,
sin(r), cos(r), 0, 0,
0, 0, 1, 0,
0, 0, 0, 1;
model = rotate * model;
第二个函数:
get_projection_matrix(float eye_fov, float aspect_ratio, float,zNear, float zFar): 使用给定的参数逐个元素地构建透视投影矩阵并返回该矩阵。
分析函数传递的四个参数:
FOV 视锥体竖直方向张开的角度
Aspect 当前摄像机的横纵比
Near 近处距离
Far 远处距离
透视投影的投影矩阵:
float fov = fov / 180.0 * acos(-1);
float cot = cos(fov / 2) / sin(fov / 2);
frustum << cot/aspect, 0, 0, 0,
0, cot, 0, 0,
0, 0, -(Far+Near)/(Far-Near), -2*(Near*Far)/(Far-Near),
0, 0, -1, 0;
projection = frustum * projection;