protected virtual void ExtrudeBounds( AxisAlignedBox box, Vector4 lightPosition, float extrudeDistance )
{
Vector3 extrusionDir = Vector3.Zero;
if ( lightPosition.w == 0 )
{
extrusionDir.x = -lightPosition.x;
extrusionDir.y = -lightPosition.y;
extrusionDir.z = -lightPosition.z;
extrusionDir.Normalize();
extrusionDir *= extrudeDistance;
box.SetExtents( box.Minimum + extrusionDir, box.Maximum + extrusionDir );
}
else
{
Vector3[] corners = box.Corners;
Vector3 vmin = new Vector3();
Vector3 vmax = new Vector3();
for ( int i = 0; i < 8; i++ )
{
extrusionDir.x = corners[ i ].x - lightPosition.x;
extrusionDir.y = corners[ i ].y - lightPosition.y;
extrusionDir.z = corners[ i ].z - lightPosition.z;
extrusionDir.Normalize();
extrusionDir *= extrudeDistance;
Vector3 res = corners[ i ] + extrusionDir;
if ( i == 0 )
{
vmin = res;
vmax = res;
}
else
{
vmin.Floor( res );
vmax.Ceil( res );
}
}
box.SetExtents( vmin, vmax );
}
}