简介

GAME101作业1的答案,基础版本,仅供参考,一直认为,没有标准版本和评级版本的作业没有必要做。所以希望分享我的观点。

问题

实现 MVP中的M和P矩阵的构建。

get_model_matrix(float rotation_angle): 逐个元素地构建模型变换矩阵并返回该矩阵。在此函数中,你只需要实现三维中绕 z 轴旋转的变换矩阵,而不用处理平移与缩放。

get_projection_matrix(float eye_fov, float aspect_ratio, float zNear, float zFar): 使用给定的参数逐个元素地构建透视投影矩阵并返回该矩阵。

关于model矩阵的构建&code

model 在闫老师的课程上说的是,关于物品的摆放。

Eigen::Matrix4f get_model_matrix(float rotation_angle)
{
Eigen::Matrix4f model = Eigen::Matrix4f::Identity(); // TODO: Implement this function
// Create the model matrix for rotating the triangle around the Z axis.
// Then return it.
Eigen::Matrix4f rotate;
float radian = rotation_angle/180.0*MY_PI;
rotate << cos(radian), -1*sin(radian), 0, 0,
sin(radian), cos(radian), 0, 0,
0, 0, 1, 0,
0, 0, 0, 1;//单纯实现了关于z轴的旋转矩阵
model = rotate * model;
return model;
}

关于Projection 的构建 & code

Projection 在闫老师的课程上说的是,将三维的物体映射为二维的物体

/*
* eye_fov 视野的大小
* aspect_ratio 长宽比? 猜测是视野的长宽比率
* zNear 最近处的坐标
* zFar 最远处的坐标
*/
Eigen::Matrix4f get_projection_matrix(float eye_fov, float aspect_ratio,
float zNear, float zFar)
{
// Students will implement this function
// TODO: Implement this function
// Create the projection matrix for the given parameters.
// Then return it.
Eigen::Matrix4f projection = Eigen::Matrix4f::Identity();
Eigen::Matrix4f P2O = Eigen::Matrix4f::Identity();//将透视投影转换为正交投影的矩阵
P2O<<zNear, 0, 0, 0,
0, zNear, 0, 0,
0, 0, zNear+zFar,(-1)*zFar*zNear,
0, 0, 1, 0;// 进行透视投影转化为正交投影的矩阵
float halfEyeAngelRadian = eye_fov/2.0/180.0*MY_PI;
float t = zNear*std::tan(halfEyeAngelRadian);//top y轴的最高点
float r=t*aspect_ratio;//right x轴的最大值
float l=(-1)*r;//left x轴最小值
float b=(-1)*t;//bottom y轴的最大值
Eigen::Matrix4f ortho1=Eigen::Matrix4f::Identity();
ortho1<<2/(r-l),0,0,0,
0,2/(t-b),0,0,
0,0,2/(zNear-zFar),0,
0,0,0,1;//进行一定的缩放使之成为一个标准的长度为2的正方体
Eigen::Matrix4f ortho2 = Eigen::Matrix4f::Identity();
ortho2<<1,0,0,(-1)*(r+l)/2,
0,1,0,(-1)*(t+b)/2,
0,0,1,(-1)*(zNear+zFar)/2,
0,0,0,1;// 把一个长方体的中心移动到原点
Eigen::Matrix4f Matrix_ortho = ortho1 * ortho2;
projection = Matrix_ortho * P2O;
return projection;
}

测试样例

Rasterizer -r 0/45/90





QUESTION

整个流程其实还是不是特别清楚

\[M_{persp} = M_{ortho}M_{persp->ortho}
\]

这个公式的作用输入输出是什么?

GUESS:猜测 先将一个锥视图转为正交视图然后调用正交矩阵就可以得到相应的人类视觉的图片。

参考资料

viede https://www.bilibili.com/video/av90798049?p=4

pdf https://sites.cs.ucsb.edu/~lingqi/teaching/resources/GAMES101_Lecture_04_supp.pdf

GAMES101 作业1 基础版 答案的更多相关文章

  1. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  2. yii 基础版用rbac-plus

    1.将高级版的common/models/user.php覆盖掉基础版的models/user.php 2.将命名空间 namespace common\models;改为 namespace app ...

  3. PHP框架Yii2.0安装(基础版、高级版)

    最近农成也是切入了yiiframework 2.0,就是安装yii2.0就花费了不少的时间,为此做了很多的弯路,特此写一篇博文来给后面学习的同学少走一点的弯路.写的不好的地方欢迎各位学习的同学们能够指 ...

  4. 【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-上位机源码

    [CC2530入门教程-增强版]基础技能综合实训案例(基础版)-上位机源码 广东职业技术学院  欧浩源 一.需求分析 按照指定参数打开串口,与测控终端建立数据传输通道,并根据应用要求实现程序逻辑,具体 ...

  5. 【重磅】PRO基础版免费,是时候和ExtJS说再见了!

    三石的新年礼物 9 年了,FineUI(开源版)终于迎来了她的继任者 - FineUIPro(基础版),并且完全免费!   FineUIPro(基础版)作为三石奉献给社区的一个礼物,绝对让你心动: 拥 ...

  6. FineUICore(基础版)v5.4.0已发布!

    FineUICore(基础版)已发布,请先加入知识星球,下载后可以永久免费商用:

  7. FineUIPro/Mvc/Core v5.4.0即将发布(Core基础版,新功能列表)!

    FineUIPro/Mvc/Core v5.4.0 即将于 2019-03-04 发布,目前官网示例已更新,先睹为快:http://pro.fineui.com/http://mvc.fineui.c ...

  8. 【重磅】FineUIPro基础版免费,是时候和ExtJS说再见了!

    三石的新年礼物 9 年了,FineUI(开源版)终于迎来了她的继任者 - FineUIPro(基础版),并且完全免费!   FineUIPro(基础版)作为三石奉献给社区的一个礼物,绝对让你心动: 拥 ...

  9. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...

  10. AppBoxPro(权限管理框架--FineUIPro基础版+工厂模式+ADO.NET+存储过程)

    FineUIPro基础版火爆来袭,特献上ADO.NET纯SQL方式AppBoxPro,希望大家能够喜欢! 下载源码请到[知识星球] https://t.zsxq.com/3rrNFyv

随机推荐

  1. Git撤销本地commit(未push)

    查询commit日志 git log 查询到自己commit的上个版本id(commit_id) 撤销(这里是放弃自己commit的更改,直接回退到上个版本源码) git reset --hard c ...

  2. Rust实战系列-深入理解数据

    本文是<Rust in action>学习总结系列的第五部分,更多内容请看已发布文章: 一.Rust实战系列-Rust介绍 二.Rust实战系列-基本语法 三.Rust实战系列-复合数据类 ...

  3. Android去掉默认的标题栏

    去掉默认的标题栏:在onCreate方法里添加supportRequestWindowFeature(Window.FEATURE_NO_TITLE); @Override protected voi ...

  4. RPC实战与核心原理之异常重试

    异常重试:在约定时间内可靠的重试 回顾 在 RPC 框架中如何设计自适应的负载均衡,其关键点就是调用端收集服务端每个节点的指标数据,再根据各方面的指标数据进行计算打分,最后根据每个节点的分数,将更多的 ...

  5. Pytorch 看起来好像没占gpu的样子的原因

    今天好哥们儿赞助的3080到手了,欣喜若狂的装上 然后跑了跑MNIST,看着任务管理器CPU跑100%,GPU跑3%,查了半天解决不了,郁闷了好一会儿.. 后来在https://www.bilibil ...

  6. 用装饰器简化大量if-elif代码

    源码地址:https://github.com/edgedb/edgedb/blob/master/edb/common/value_dispatch.py 鸣谢原文:一日一技:使用装饰器简化大量 i ...

  7. WinDbg 分析 .NET Dump 线程锁问题

    在定位 .NET 应用程序中的高 CPU 占用问题时,WinDbg 是非常强大的工具之一,尤其配合 SOS 扩展使用可以快速锁定"忙线程"或死锁等问题. 本文将基于一次实际的分析流 ...

  8. 服务器操作SCP命令使用

    一.将本地代码上传服务器scp命令操作 命令是:scp dtcloud-master.zip root@10.14.22.141:/opt/dtcloud/ 将本地的scp dtcloud-maste ...

  9. buck参数工具分享

    工具链接:https://cnblogs-img.oss-cn-hangzhou.aliyuncs.com/docs/buck.xls

  10. SSH实现服务器之间免密登录

    1.介绍 SSH(Secure Shell)是一种用于计算机之间安全远程登录和其他网络服务的协议,它通过加密通信来确保在不安全的网络中也能安全地传输数据.SSH可以用于登录远程主机.执行命令和管理远程 ...