378 {
379 Vector3 left = objectPosition - cameraPosition;
380 float num = left.LengthSquared();
381 left = ((!(num < 0.0001f)) ?
Vector3.Multiply(left, 1f / MathF.Sqrt(num)) : (-cameraForwardVector));
383 float x =
Vector3.Dot(rotateAxis, left);
386 if (MathF.Abs(x) > 0.99825466f)
387 {
388 vector2 = objectForwardVector;
389 x =
Vector3.Dot(rotateAxis, vector2);
390 if (MathF.Abs(x) > 0.99825466f)
391 {
392 vector2 = ((MathF.Abs(rotateAxis.Z) > 0.99825466f) ?
new Vector3(1f, 0f, 0f) :
new Vector3(0f, 0f, -1f));
393 }
396 }
397 else
398 {
401 }
403 result.M11 = vector3.X;
404 result.M12 = vector3.Y;
405 result.M13 = vector3.Z;
406 result.M14 = 0f;
407 result.M21 = vector.X;
408 result.M22 = vector.Y;
409 result.M23 = vector.Z;
410 result.M24 = 0f;
411 result.M31 = vector2.X;
412 result.M32 = vector2.Y;
413 result.M33 = vector2.Z;
414 result.M34 = 0f;
415 result.M41 = objectPosition.X;
416 result.M42 = objectPosition.Y;
417 result.M43 = objectPosition.Z;
418 result.M44 = 1f;
419 return result;
420 }
Matrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44)