将屏幕距离转换为眼睛空间光线距离

时间:2017-02-01 19:02:13

标签: opengl graphics

我的光线具有原点(x,y,z)和方向(dx,dy,dz),在均匀的眼睛空间坐标中给出:

(= x,y,z,1)+ t *(dx,dy,dz,0)

我需要计算的是t的值,对于给定的像素距离,n导致距离(x,y,z)的屏幕投影n个像素点。我怎样才能做到这一点?

此致

1 个答案:

答案 0 :(得分:0)

将一个点投影到一个平面中是通过该点和视图的方向获得该光线平面的交点。假设视图方向是向量v。

将光线的原点(让我们称之为O {x,y,z})放在垂直于投影近平面的相机的直线上。让我们调用它的投影P.然后第二个点(你表示为S = O + t·d)将投射到点T处的近平面。你需要't'使距离PT = n。

如果您进行交叉产品c = vxd,您会在近平面上获得距离。记住vxd= |v||d|sin(a)。如果v和d都归一化,则距离是v和d之间角度的sin。

如果d未归一化(dnn),即| d | =距离(O,S),那么在近平面投影后O和S之间的距离为k= cross(dnn,d)= distance(O,S)·cross(v,d) = t·cross(v,d)。得到所需的值n,与k n= k相同会导致t= n / cross(v,d),其中v,d标准化。

在近平面中使用像素代替值只是用窗口大小正确缩放的问题。