我有一条光线,其原点(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)
。
使用像素而不是近平面中的值只是根据窗口大小适当缩放的问题。