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



我有一条光线,其原点(x,y,z)和方向(dx,dy,dz)在齐次眼睛空间坐标中给出:

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

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

问候

将一个点投影到一个平面中,即通过该点获得光线与该平面以及视图方向的交点。假设视图方向是矢量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与kn= k相同,得到具有归一化的v、d的t= n / cross(v,d)

使用像素而不是近平面中的值只是根据窗口大小适当缩放的问题。

最新更新