Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 为什么作业6的ray direction 减去eye_pos是不对的?

Viewing 4 reply threads
  • Author
    Posts
    • #5220 Score: 0
      xuyichao
      Participant

      光线方向只是用归一化的(x,y,-1),结果是对的。如果按照课件上减掉eye_pos就不对了。
      这是为什么?

    • #5233 Score: -1
      clarence
      Participant
      -2 pt

      因为得到的方向向量是基于原点计算得到的,同时方向向量位移并不改变性质,所以不需要减去eye_pos。

      This post has received 1 vote down.
    • #7042 Score: 0
      重归混沌
      Participant

      我查看了一下obj文件,发现基本上坐标都在-10,10之间,而eye_pos太近了,减了eye_pos之后,导致FOV不对,所以看不到了。

      我使用光栅化时的算法构造了一个-1,1的投影平面,然后把eye_pos到投影屏幕的距离设置到15左右,效果就跟不减eye_pos差不多了。

    • #10523 Score: 0
      willzhu
      Participant

      我理解这是由ray的表示方法决定的,在公式:ray = ori + t*dir 中,dir向量是一个方向向量,而方向向量默认以原点为起点,如果减去eye_pos,其实得到的是另一个方向;
      PS:作业5中,eye_pos在原点只是个巧合

    • #24664 Score: 0
      Jamie
      Participant

      我这两天也被这个问题困惑着,说一下我自己的理解。
      第一,计算Ray的方向时,是在camera space里面计算的,camera space是经过view/camera transformation之后的(lecture 4),  所以在camera space中的eye pos实际上就是camera的位置,也就是原点,这一点是view transformation的假定之一,即看向-z轴,头朝y轴正方向。所以光线的方向并没错。

      第二,代码中的eye pos是world space中的坐标,代码计算出的x y和eye pos都不是同一个坐标系下的,当然不能进行运算。

      第三,针对这个任务中,world space和camera space以及到screen的关系,首先world space -> camera space的变换只是平移,这个变换不会影响方向向量。其次本任务中的camera space -> scree的变换原本应该具有三步(lecture 4),第一是perspective projection 第二是orthographic projection 第三是viewport transformation,刚好这个任务中唯一对方向向量有影响的perspective projection被简化了,从代码中也可以看到计算x y是只有简单的乘除运算,想想这个乘除运算在矩阵中代表着什么?如果perspective projection没被简化,应当涉及矩阵乘除,所以在camera space中计算得到的方向向量在world space中仍然适用。

      以上。

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