问题:视点在边界盒之外,视线与边界盒的交点。
shader中使用代码片段如下:
float3 GetFirstSceneIntersection( float3 vRayO, float3 vRayDir )
{
// Intersect the ray with the bounding box
// ( y - vRayO.y ) / vRayDir.y = t
float fMaxT = -1;
float t;
float3 vRayIntersection;
// -X plane
if( vRayDir.x > 0 )
{
t = ( 0 - vRayO.x ) / vRayDir.x;
fMaxT = max( t, fMaxT );
}
……
vRayIntersection = vRayO + vRayDir * fMaxT;
return vRayIntersection;
}
代码中
t = ( 0 - vRayO.x ) / vRayDir.x;
的来源
设p0为视点,dir为视线矢量
因此 视线上点的坐标可以表为:p=p0+t*dir;
此时所有点的坐标在边界盒决定纹理空间内,边界盒长宽高都为1,原点位于边界盒左下角。
可以知道,左侧平面公式为 x=0:
代入公式可得:
0=p0.x+t*dir.x;
t=(0-p0.x)/dir.x;