public Ray TurnAboutOrtho( float3 _Axis, float _fAngle )
{
float fCos = m_Aim.Dot( _Axis );
float fSin = (float) System.Math.Sqrt( 1.0f - fCos * fCos );
float3 Z = m_Aim.Cross( _Axis );
float3 X = _Axis.Cross( Z );
float3 Temp = new float3( (float) (fSin * System.Math.Cos( _fAngle ) - fCos * System.Math.Sin( _fAngle )), (float) (fSin * System.Math.Sin( _fAngle ) + fCos * System.Math.Cos( _fAngle )), 0.0f );
m_Aim = Temp.x * X + Temp.y * _Axis;
return this;
}