public Matrix GetWorldMatrix(Vector3Double targetPosition) { Matrix scaleMatrix, translationMatrix; Vector3Double targetRelativePosition = targetPosition - Position; double targetRelativeDistance = targetRelativePosition.Length(); if (targetRelativeDistance > UnscaledSpaceDistance) { float scaledTargetRelativeDistance = (float)(UnscaledSpaceDistance + ScaledSpaceDistance * (1 - Math.Exp((ScaledSpaceDistance - targetRelativeDistance) / InvisibleDistance))); Vector3 scaledTargetRelativePosition = scaledTargetRelativeDistance * Vector3Double.Normalize(targetRelativePosition); scaleMatrix = Matrix.CreateScale((float)(scaledTargetRelativeDistance / targetRelativeDistance)); translationMatrix = Matrix.CreateTranslation(scaledTargetRelativePosition); } else { scaleMatrix = Matrix.Identity; translationMatrix = Matrix.CreateTranslation(targetRelativePosition.ToVector3()); } return(scaleMatrix * translationMatrix); }
public static Vector3 Normalize(Vector3Double value) { return((value / value.Length()).ToVector3()); }