Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ CreateConstrainedBillboard()

static Matrix4x4 System.Numerics.Matrix4x4.CreateConstrainedBillboard ( Vector3 objectPosition,
Vector3 cameraPosition,
Vector3 rotateAxis,
Vector3 cameraForwardVector,
Vector3 objectForwardVector )
inlinestatic

Definition at line 377 of file Matrix4x4.cs.

378 {
379 Vector3 left = objectPosition - cameraPosition;
380 float num = left.LengthSquared();
381 left = ((!(num < 0.0001f)) ? Vector3.Multiply(left, 1f / MathF.Sqrt(num)) : (-cameraForwardVector));
382 Vector3 vector = rotateAxis;
383 float x = Vector3.Dot(rotateAxis, left);
384 Vector3 vector3;
385 Vector3 vector2;
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 }
394 vector3 = Vector3.Normalize(Vector3.Cross(rotateAxis, vector2));
395 vector2 = Vector3.Normalize(Vector3.Cross(vector3, rotateAxis));
396 }
397 else
398 {
399 vector3 = Vector3.Normalize(Vector3.Cross(rotateAxis, left));
400 vector2 = Vector3.Normalize(Vector3.Cross(vector3, vector));
401 }
402 System.Runtime.CompilerServices.Unsafe.SkipInit(out Matrix4x4 result);
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)
Definition Matrix4x4.cs:93

References System.MathF.Abs(), System.Numerics.Vector3.Cross(), System.Numerics.Vector3.Dot(), System.Numerics.Vector3.LengthSquared(), System.Numerics.Vector3.Multiply(), System.Numerics.Vector3.Normalize(), System.MathF.Sqrt(), System.Numerics.Vector3.X, System.Numerics.Vector3.Y, and System.Numerics.Vector3.Z.