Tagged: 

Viewing 9 reply threads
  • Author
    Posts
    • #2978 Score: 0
      ChenLinghao(技术秘书)
      Keymaster
      4 pts

      大家好,GAMES101课程的作业1现在发布。

      我们在games,smartchair放了两份完全相同的备份,请大家根据网络环境自行选择下载途径。

      games的作业1链接

      smartchair的作业1链接

    • #9209 Score: 2
      诗酒趁年华
      Participant
      2 pts

      老师们好!
      对作业提个建议,需要做的作业中能否把代码参数说明一下,不然很多要去猜才行

      比如作业1文档描述:“get_projection_matrix(float eye_fov, float aspect_ratio, float
      zNear, float zFar): 使用给定的参数逐个元素地构建透视投影矩阵并返回
      该矩阵。”

      比如上面函数,第一个参数, 这个到底是个角度呢?还是投射投影钟,眼睛的位置啊, 第二个就没法猜了

      如果作业中,能对这些参数说明一下, 可以更能够加深大家的理解啊,不能这个只能靠猜测

      This post has received 2 votes up.
      • #9210 Score: 0
        Noviorlu
        Participant
        1 pt

        这个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 2 years, 8 months ago by Noviorlu.
    • #9212 Score: 0
      诗酒趁年华
      Participant
      2 pts

      @noviorluchan 你好,感觉不对哦,main函数对这个函数调用的时候是这样的
      r.set_projection(get_projection_matrix(45, 1, 0.1, 50)); 宽高比45比1吗?后面的东西你也在猜

      所以希望老师们,主教们帮忙处理一下

      • #9217 Score: 1
        Noviorlu
        Participant
        1 pt

        不是的,是视角为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 2 years, 8 months ago by Noviorlu. Reason: add
    • #9462 Score: 1
      Youlong
      Participant
      1 pt

      大家注意一下,实际画出来的三角形是倒着的。代码中三角形的三个顶点为(2,0),(0,2),(-2,0)(忽略z轴坐标),即三角形的底部在下面。但实际画出来的三角形的底部在上面,这是因为三角形落在了摄像头的后方,注意到get_projection_matrix函数传进去的zNear和zFar都是正的,但是三角形的z是负的。所以三角形落在了摄像头后方,这个时候使用projection矩阵会有一个类似于对称翻转的效果(回忆projection矩阵的推导)。

      This post has received 1 vote up.
    • #9666 Score: 0
      两只黑眼圈
      Participant

      画出来的三角形是倒着的原因是因为get_view_matrix这个方法中没有处理旋转矩阵导致的,需要乘以一个旋转矩阵,把观测方向转过来

    • #10027 Score: 0
      lonely
      Participant

      我刚写出来也是倒三角,后来看了一下别人写的,才发现是因为透视投影那里最后计算矩阵相乘的时候写的有问题。获取透视投影矩阵有二个步骤,第一步先把远平面挤压到跟近平面一样大小(记作矩阵1),第二步应用正交投影矩阵。其中正交投影的计算也需要两个步骤,第一步先把物体移动到坐标中心(记作矩阵2),第二步伸缩物体为-1到1的范围(记作矩阵3)。所以要想得到投影矩阵需要经过三个矩阵的相乘,这个顺序不能写错了。
      应该是:3 * 2 * 1。我刚开始写的是 1 * 2 * 3,得到的就是一个倒三角形。

    • #11373 Score: 0
      Display
      Participant

      求帮助。透视投影矩阵,怎么通过float eye_fov, float aspect_ratio, float zNear, float zFar,算出移动到原点的矩阵。谢谢了。

    • #11470 Score: 0
      輕山柒海
      Participant

      关于为什么得到的图像上下颠倒,这里有个人的理解。
      《GAMES101》作业框架问题详解

    • #11856 Score: 0
      FaceBasin
      Participant

      zNear, zFar应该都是负数,按照作业正数设定的话(x, y)变成(-x, -y)所以看上去就是颠倒了

    • #12019 Score: 0
      unkvcc
      Participant
      2 pts

      老师在推导投影公式的时候,相机看向-z方向,在标准立方体 [l,r] x [b,t] x [f,n] 中假设了近平面的z值大于远平面的z值,如果近平面是 -0.5 远平面是 -50 ,最终得到的就是方向朝上的三角形。

Viewing 9 reply threads
  • You must be logged in to reply to this topic.