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

◆ CreateConstrainedBillboard() [1/2]

static void Microsoft.Xna.Framework.Matrix.CreateConstrainedBillboard ( ref Vector3 objectPosition,
ref Vector3 cameraPosition,
ref Vector3 rotateAxis,
Vector3? cameraForwardVector,
Vector3? objectForwardVector,
out Matrix result )
inlinestatic

Definition at line 372 of file Matrix.cs.

373 {
374 Vector3 value = default(Vector3);
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 {
381 value = (cameraForwardVector.HasValue ? (-cameraForwardVector.Value) : Vector3.Forward);
382 }
383 else
384 {
385 Vector3.Multiply(ref value, 1f / (float)Math.Sqrt(num), out value);
386 }
387 Vector3 vector = rotateAxis;
388 Vector3.Dot(ref rotateAxis, ref value, out var result2);
389 Vector3 result3;
390 Vector3 result4;
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;
400 result3 = ((Math.Abs(result2) > 0.99825466f) ? Vector3.Right : Vector3.Forward);
401 }
402 }
403 else
404 {
405 result2 = rotateAxis.X * Vector3.Forward.X + rotateAxis.Y * Vector3.Forward.Y + rotateAxis.Z * Vector3.Forward.Z;
406 result3 = ((Math.Abs(result2) > 0.99825466f) ? Vector3.Right : Vector3.Forward);
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 {
415 Vector3.Cross(ref rotateAxis, ref value, out result4);
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)

References System.Math.Abs(), Microsoft.Xna.Framework.Vector3.Cross(), Microsoft.Xna.Framework.Vector3.Dot(), Microsoft.Xna.Framework.Vector3.Forward, Microsoft.Xna.Framework.Vector3.Multiply(), Microsoft.Xna.Framework.Vector3.Right, System.Math.Sqrt(), System.value, Microsoft.Xna.Framework.Vector3.X, Microsoft.Xna.Framework.Vector3.Y, and Microsoft.Xna.Framework.Vector3.Z.