当我们想利用 Raytrace 技术实现一些伪 3D 的效果的时候,常常会遇到 ViewRay 和平面 是否相交的问题。
首先我们来看看普通版的解决方法。
普通版
如果只是简单的判断从相机射出的光线 ViewRay 是否和平面相交,我们只需要把光线向量和平面的法向量进行点乘即可,如下代码所示
/// @note 光线追踪之平面
/// @param pl 平面法线
/// @param ro Ray Origin
/// @param rd Ray Direction
float tracePlane( in vec4 pl, in vec3 ro, in vec3 rd )
{/// @note 最直接的方式,直接用 ViewRay 的方向向量和平面法线做点乘/// 注意 ViewRay 和平面法线是反向的,所以要加负号。/// 但缺点是这样没有景深的效果return -dot(pl.xyz, rd);
}
效果如图所示