我这两天也被这个问题困惑着,说一下我自己的理解。
第一,计算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中仍然适用。
以上。