Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 作业1发布公告
Tagged: 框架
- This topic has 11 replies, 10 voices, and was last updated 2 years, 4 months ago by unkvcc.
-
AuthorPosts
-
-
大家好,GAMES101课程的作业1现在发布。
我们在games,smartchair放了两份完全相同的备份,请大家根据网络环境自行选择下载途径。
-
老师们好!
对作业提个建议,需要做的作业中能否把代码参数说明一下,不然很多要去猜才行比如作业1文档描述:“get_projection_matrix(float eye_fov, float aspect_ratio, float
zNear, float zFar): 使用给定的参数逐个元素地构建透视投影矩阵并返回
该矩阵。”比如上面函数,第一个参数, 这个到底是个角度呢?还是投射投影钟,眼睛的位置啊, 第二个就没法猜了
如果作业中,能对这些参数说明一下, 可以更能够加深大家的理解啊,不能这个只能靠猜测
This post has received 2 votes up.-
这个eye_fov和aspect_ratio应该是在第五节lec开始讲的视野和长宽比,视野。
用tan(fovY/2) = t/n 和 aspect = r/t这两个公式可以得到width和height然后转换成“Canonical Cube to Screen”的矩阵就可以了。
唯一不是特别明确的就是这个FOV是horizontal还是vertical的。一般情况eye fov应该是指horizontal的fov,btw老师在课上举例是拿Up也就是Y轴举例。
- This reply was modified 3 years, 2 months ago by Noviorlu.
-
-
@noviorluchan 你好,感觉不对哦,main函数对这个函数调用的时候是这样的
r.set_projection(get_projection_matrix(45, 1, 0.1, 50)); 宽高比45比1吗?后面的东西你也在猜所以希望老师们,主教们帮忙处理一下
-
不是的,是视角为45度,宽高比例为1比1,0.1是near的position,50是far的position。如果是一般屏幕的话一般来说宽高比是16:9根据公式aspect =right/top可得aspect为0.5625。
我理解的解题思路应该是先进行角度的压缩(压成一个长方形),然后再进行长方形到1比1正方形的转换。
压缩会使用到near和far两个变量,根据LEC4最后得出的Mpersp Matrix即可解决。
长方形变成正方形,会使用到“长宽高”三个变量。已知“宽”可以根据near far相减得到,“长和高”使用near点的view平面,可以使用FOV和Aspectratio两个公式算出。如此便可得到Mortho Matrix。
将两个Matrix以ortho前persp后的方式相乘起来,便可得到最终的projection matrix。
我给老师们的建议是,test case不是特别的直观,写完之后没有办法很直观的看到Matrix的到底写对没。如果有条件的话可以整个unit test试一试?
ps.主教是啥(笑)
This post has received 1 vote up.- This reply was modified 3 years, 2 months ago by Noviorlu. Reason: add
-
-
大家注意一下,实际画出来的三角形是倒着的。代码中三角形的三个顶点为(2,0),(0,2),(-2,0)(忽略z轴坐标),即三角形的底部在下面。但实际画出来的三角形的底部在上面,这是因为三角形落在了摄像头的后方,注意到get_projection_matrix函数传进去的zNear和zFar都是正的,但是三角形的z是负的。所以三角形落在了摄像头后方,这个时候使用projection矩阵会有一个类似于对称翻转的效果(回忆projection矩阵的推导)。
This post has received 1 vote up. -
两只黑眼圈Participant
画出来的三角形是倒着的原因是因为get_view_matrix这个方法中没有处理旋转矩阵导致的,需要乘以一个旋转矩阵,把观测方向转过来
-
lonelyParticipant
我刚写出来也是倒三角,后来看了一下别人写的,才发现是因为透视投影那里最后计算矩阵相乘的时候写的有问题。获取透视投影矩阵有二个步骤,第一步先把远平面挤压到跟近平面一样大小(记作矩阵1),第二步应用正交投影矩阵。其中正交投影的计算也需要两个步骤,第一步先把物体移动到坐标中心(记作矩阵2),第二步伸缩物体为-1到1的范围(记作矩阵3)。所以要想得到投影矩阵需要经过三个矩阵的相乘,这个顺序不能写错了。
应该是:3 * 2 * 1。我刚开始写的是 1 * 2 * 3,得到的就是一个倒三角形。 -
DisplayParticipant
求帮助。透视投影矩阵,怎么通过float eye_fov, float aspect_ratio, float zNear, float zFar,算出移动到原点的矩阵。谢谢了。
-
輕山柒海Participant
关于为什么得到的图像上下颠倒,这里有个人的理解。
《GAMES101》作业框架问题详解 -
FaceBasinParticipant
zNear, zFar应该都是负数,按照作业正数设定的话(x, y)变成(-x, -y)所以看上去就是颠倒了
-
老师在推导投影公式的时候,相机看向-z方向,在标准立方体 [l,r] x [b,t] x [f,n] 中假设了近平面的z值大于远平面的z值,如果近平面是 -0.5 远平面是 -50 ,最终得到的就是方向朝上的三角形。
-
-
AuthorPosts
- You must be logged in to reply to this topic.