简介

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. leetcode001 两数之和

    问题描述:两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答 ...

  2. Asp.net mvc基础(十三)集合常用的扩展方法和Linq语句

    详情参考:C#之集合常用扩展方法与Linq - 冯继强fjq - 博客园 (cnblogs.com)

  3. Junit单元测试的Gradle设置

    官方文档 https://docs.gradle.org/current/userguide/java_testing.html test{ useJUnit() //指定使用junit执行测试. / ...

  4. 一、Java语言介绍

    1.硬件知识介绍 2.常用dos命令以及快捷键 1 /** 2 *@desc: 复习 3 *@Description: 4 * dir:列出当前文件目录下的所有文件; 5 * md:创建一个新目录; ...

  5. 9.30SDFZCSP-J模考总结

    我是傻逼我是傻逼我是傻逼我是傻逼\Huge我是傻逼我是傻逼\\我是傻逼我是傻逼\\我是傻逼我是傻逼我是傻逼我是傻逼 T3数组开小痛失50pts!!!!!! 分数 T1 T2 T3 T4 总分 100p ...

  6. 代码随想录第二十五天 | Leecode 491. 非递减子序列、46. 全排列、47. 全排列 II

    Leecode 491. 非递减子序列 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 .你可以按 任意顺序 返回答案. 数组中可能含有重 ...

  7. 模板导入_分页_cookie_装饰器_笔记

    默认值:url(r'index/', views.index,{'name':"root"})def index(request,name):    print(name)     ...

  8. "NU1605: 错误形式的警告: 检测到包降级"的解决办法

    这两行的意思是需要我们升级Maui.Controls的版本在8.0.14,取高版本. 同理,再次进行: 最后:

  9. codeup之统计同成绩学生人数

    Description 读入N名学生的成绩,将获得某一给定分数的学生人数输出. Input 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的成绩,相邻两数字用一个空格间隔 ...

  10. QQ会员首页HTML+CSS

    作为一个穷人,唯一一次逛这么久的会员首页还是因为要写最头大的web~苦涩 效果图 源码 <!DOCTYPE html> <html> <head> <meta ...