373 {
375 value.X = objectPosition.X - cameraPosition.X;
376 value.Y = objectPosition.Y - cameraPosition.Y;
377 value.Z = objectPosition.Z - cameraPosition.Z;
378 float num =
value.LengthSquared();
379 if (num < 0.0001f)
380 {
382 }
383 else
384 {
386 }
388 Vector3.Dot(ref rotateAxis, ref
value, out var result2);
391 if (
Math.
Abs(result2) > 0.99825466f)
392 {
393 if (objectForwardVector.HasValue)
394 {
395 result3 = objectForwardVector.Value;
396 Vector3.Dot(ref rotateAxis, ref result3, out result2);
397 if (
Math.
Abs(result2) > 0.99825466f)
398 {
399 result2 = rotateAxis.X * Vector3.Forward.X + rotateAxis.Y * Vector3.Forward.Y + rotateAxis.Z *
Vector3.Forward.Z;
401 }
402 }
403 else
404 {
405 result2 = rotateAxis.X * Vector3.Forward.X + rotateAxis.Y * Vector3.Forward.Y + rotateAxis.Z *
Vector3.Forward.Z;
407 }
408 Vector3.Cross(ref rotateAxis, ref result3, out result4);
409 result4.Normalize();
410 Vector3.Cross(ref result4, ref rotateAxis, out result3);
411 result3.Normalize();
412 }
413 else
414 {
416 result4.Normalize();
417 Vector3.Cross(ref result4, ref vector, out result3);
418 result3.Normalize();
419 }
420 result.M11 = result4.X;
421 result.M12 = result4.Y;
422 result.M13 = result4.Z;
423 result.M14 = 0f;
424 result.M21 = vector.X;
425 result.M22 = vector.Y;
426 result.M23 = vector.Z;
427 result.M24 = 0f;
428 result.M31 = result3.X;
429 result.M32 = result3.Y;
430 result.M33 = result3.Z;
431 result.M34 = 0f;
432 result.M41 = objectPosition.X;
433 result.M42 = objectPosition.Y;
434 result.M43 = objectPosition.Z;
435 result.M44 = 1f;
436 }
static double Sqrt(double d)
static double Abs(double value)