games101 作业1
本次作业基本版只需要实现mp变换
非常简单的一次作业(如果不做提高题的话)
要求1:实现绕z轴旋转
Eigen::Matrix4f get_model_matrix(float rotation_angle)//模型转换
{
// TODO: Implement this function
// Create the model matrix for rotating the triangle around the Z axis.
// Then return it.
Eigen::Matrix4f model = Eigen::Matrix4f::Identity();//定义 4*4 单位矩阵
float r = rotation_angle / 180.0 * MY_PI;//定义旋转的弧度
Eigen::Matrix4f translate;//初始化模型变换矩阵
translate << cos(r), -sin(r), 0, 0,
sin(r), cos(r), 0, 0,
0, 0, 1, 0,
0, 0, 0, 1;
model = translate * model;
return model;
}
要求2:实现投影矩阵
按照课上教的,这一步分成两步来实现
- 先把frustum压成一个三维空间中的矩形体(我不太确定是不是叫这个名字)
- 应用正交投影
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();//定义 4*4 单位矩阵
// TODO: Implement this function
// Create the projection matrix for the given parameters.
// Then return it.
Eigen::Matrix4f persp_to_ortho = Eigen::Matrix4f::Identity();//透视->正交的“挤压”矩阵”
persp_to_ortho << zNear, 0, 0, 0,
0, zNear, 0, 0,
0, 0, zNear + zFar, -zNear*zFar,
0, 0, 1, 0;
float half_eye_fovY = eye_fov / 2 / 180.0 * MY_PI;
// 负号的作用是解决三角形颠倒问题
float top = -zNear * tan(half_eye_fovY);
float bottom = -top;
float right = aspect_ratio * top;
float left = -right;//锥体已经变成了方块(长方体正方体都有可能)
Eigen::Matrix4f ortho;
ortho <<
2 / (right - left), 0, 0, -(left + right) / 2,
0, 2 / (top - bottom), 0, -(top+bottom) / 2,
0, 0, 2 / (zNear - zFar), -(zFar + zNear) / 2,
0, 0, 0, 1;
projection = ortho * persp_to_ortho;
return projection;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!