305 {
307 value.X = objectPosition.X - cameraPosition.X;
308 value.Y = objectPosition.Y - cameraPosition.Y;
309 value.Z = objectPosition.Z - cameraPosition.Z;
310 float num =
value.LengthSquared();
311 if (num < 0.0001f)
312 {
314 }
315 else
316 {
318 }
323 if (
Math.
Abs(result) > 0.99825466f)
324 {
325 if (objectForwardVector.HasValue)
326 {
327 result2 = objectForwardVector.Value;
328 Vector3.Dot(ref rotateAxis, ref result2, out result);
329 if (
Math.
Abs(result) > 0.99825466f)
330 {
331 result = rotateAxis.X * Vector3.Forward.X + rotateAxis.Y * Vector3.Forward.Y + rotateAxis.Z *
Vector3.Forward.Z;
333 }
334 }
335 else
336 {
337 result = rotateAxis.X * Vector3.Forward.X + rotateAxis.Y * Vector3.Forward.Y + rotateAxis.Z *
Vector3.Forward.Z;
339 }
340 Vector3.Cross(ref rotateAxis, ref result2, out result3);
341 result3.Normalize();
342 Vector3.Cross(ref result3, ref rotateAxis, out result2);
343 result2.Normalize();
344 }
345 else
346 {
348 result3.Normalize();
349 Vector3.Cross(ref result3, ref vector, out result2);
350 result2.Normalize();
351 }
353 result4.M11 = result3.X;
354 result4.M12 = result3.Y;
355 result4.M13 = result3.Z;
356 result4.M14 = 0f;
357 result4.M21 = vector.X;
358 result4.M22 = vector.Y;
359 result4.M23 = vector.Z;
360 result4.M24 = 0f;
361 result4.M31 = result2.X;
362 result4.M32 = result2.Y;
363 result4.M33 = result2.Z;
364 result4.M34 = 0f;
365 result4.M41 = objectPosition.X;
366 result4.M42 = objectPosition.Y;
367 result4.M43 = objectPosition.Z;
368 result4.M44 = 1f;
369 return result4;
370 }
static double Sqrt(double d)
static double Abs(double value)
Matrix(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)