光线投射 - RayCaster(中)

684 阅读1分钟

在上 一篇文章 中只描述了如何判断射线是否与三角形相交,但是却遗漏了一个重要信息,射线与三角形相交的点的距离,这个距离具有很重要的作用,因为我们需要知道一根射线穿过多个物体时,距离射线原点最近的物体

参数方程的构造

构造射线参数方程,射线上任一点可以表示为

P=O+tRP=O+tR

P表示为与三角形相交的交点,O为射线原点,R为方向,t为射线到三角形交点的距离

平面的参数方程构造  

Ax+By+Cz+D=0Ax+By+Cz+D=0

联立方程求解得

t=(AOx+BOy+COz+D)/(ARx+BRy+CRz)t=-(A*O_x+B*O_y+C*O_z+D)/(A*R_x+B*R_y+C*R_z )

化简可得

t=(N(A,B,C)O+D)/(N(A,B,C)R)t=-(N(A,B,C)*O+D)/(N(A,B,C)*R)

这样可以得到距离t的结果,带入射线参数方程中可以获得交点

交点的有效性判断

上述的平面的一般方程只是说明三角形所在的平面,我们获取射线和平面的交点后需要进一步判断交点是否在三角形内,判断的计算和原理可以在上一篇文章进行查看,此处不再多讲