Refactor engine to support double-precision vectors

This commit is contained in:
Wojtek Figat
2022-06-13 00:40:32 +02:00
parent f82e370392
commit a881c90b2e
744 changed files with 19062 additions and 12467 deletions

View File

@@ -10,13 +10,13 @@ namespace FlaxEngine.Tests
[Test]
public void TestConversion()
{
Assert.AreEqual(Vector4.Zero, new FloatR10G10B10A2(Vector4.Zero).ToVector4());
Assert.AreEqual(Vector4.One, new FloatR10G10B10A2(Vector4.One).ToVector4());
Assert.AreEqual(new Vector4(0.5004888f, 0.5004888f, 0.5004888f, 0.666667f), new FloatR10G10B10A2(new Vector4(0.5f)).ToVector4());
Assert.AreEqual(new Vector4(1, 0, 0, 0), new FloatR10G10B10A2(new Vector4(1, 0, 0, 0)).ToVector4());
Assert.AreEqual(new Vector4(0, 1, 0, 0), new FloatR10G10B10A2(new Vector4(0, 1, 0, 0)).ToVector4());
Assert.AreEqual(new Vector4(0, 0, 1, 0), new FloatR10G10B10A2(new Vector4(0, 0, 1, 0)).ToVector4());
Assert.AreEqual(new Vector4(0, 0, 0, 1), new FloatR10G10B10A2(new Vector4(0, 0, 0, 1)).ToVector4());
Assert.AreEqual(Float4.Zero, new FloatR10G10B10A2(Float4.Zero).ToFloat4());
Assert.AreEqual(Float4.One, new FloatR10G10B10A2(Float4.One).ToFloat4());
Assert.AreEqual(new Float4(0.5004888f, 0.5004888f, 0.5004888f, 0.666667f), new FloatR10G10B10A2(new Float4(0.5f)).ToFloat4());
Assert.AreEqual(new Float4(1, 0, 0, 0), new FloatR10G10B10A2(new Float4(1, 0, 0, 0)).ToFloat4());
Assert.AreEqual(new Float4(0, 1, 0, 0), new FloatR10G10B10A2(new Float4(0, 1, 0, 0)).ToFloat4());
Assert.AreEqual(new Float4(0, 0, 1, 0), new FloatR10G10B10A2(new Float4(0, 0, 1, 0)).ToFloat4());
Assert.AreEqual(new Float4(0, 0, 0, 1), new FloatR10G10B10A2(new Float4(0, 0, 0, 1)).ToFloat4());
}
}
}

View File

@@ -10,13 +10,13 @@ namespace FlaxEngine.Tests
[Test]
public void TestConversion()
{
Assert.AreEqual(Vector3.Zero, new FloatR11G11B10(Vector3.Zero).ToVector3());
Assert.AreEqual(Vector3.One, new FloatR11G11B10(Vector3.One).ToVector3());
Assert.AreEqual(new Vector3(0.5f, 0.5f, 0.5f), new FloatR11G11B10(new Vector3(0.5f)).ToVector3());
Assert.AreEqual(new Vector3(1, 0, 0), new FloatR11G11B10(new Vector3(1, 0, 0)).ToVector3());
Assert.AreEqual(new Vector3(0, 1, 0), new FloatR11G11B10(new Vector3(0, 1, 0)).ToVector3());
Assert.AreEqual(new Vector3(0, 0, 1), new FloatR11G11B10(new Vector3(0, 0, 1)).ToVector3());
Assert.AreEqual(new Vector3(10, 11, 12), new FloatR11G11B10(new Vector3(10, 11, 12)).ToVector3());
Assert.AreEqual(Float3.Zero, new FloatR11G11B10(Float3.Zero).ToFloat3());
Assert.AreEqual(Float3.One, new FloatR11G11B10(Float3.One).ToFloat3());
Assert.AreEqual(new Float3(0.5f, 0.5f, 0.5f), new FloatR11G11B10(new Float3(0.5f)).ToFloat3());
Assert.AreEqual(new Float3(1, 0, 0), new FloatR11G11B10(new Float3(1, 0, 0)).ToFloat3());
Assert.AreEqual(new Float3(0, 1, 0), new FloatR11G11B10(new Float3(0, 1, 0)).ToFloat3());
Assert.AreEqual(new Float3(0, 0, 1), new FloatR11G11B10(new Float3(0, 0, 1)).ToFloat3());
Assert.AreEqual(new Float3(10, 11, 12), new FloatR11G11B10(new Float3(10, 11, 12)).ToFloat3());
}
}
}

View File

@@ -18,8 +18,8 @@ namespace FlaxEngine.Tests
{
Assert.AreEqual(Quaternion.Euler(90, 0, 0), new Quaternion(0.7071068f, 0, 0, 0.7071068f));
Assert.AreEqual(Quaternion.Euler(25, 0, 10), new Quaternion(0.215616f, -0.018864f, 0.0850898f, 0.9725809f));
Assert.AreEqual(new Vector3(25, 0, 10), Quaternion.Euler(25, 0, 10).EulerAngles);
Assert.AreEqual(new Vector3(25, -5, 10), Quaternion.Euler(25, -5, 10).EulerAngles);
Assert.AreEqual(new Float3(25, 0, 10), Quaternion.Euler(25, 0, 10).EulerAngles);
Assert.AreEqual(new Float3(25, -5, 10), Quaternion.Euler(25, -5, 10).EulerAngles);
}
/// <summary>

View File

@@ -18,7 +18,7 @@ namespace FlaxEngine.Tests
[Test]
public void TestWorldMatrix()
{
Transform t1 = new Transform(new Vector3(10, 1, 10), Quaternion.Euler(45, 0, -15), new Vector3(1.5f, 0.5f, 0.1f));
Transform t1 = new Transform(new Vector3(10, 1, 10), Quaternion.Euler(45, 0, -15), new Float3(1.5f, 0.5f, 0.1f));
Matrix a1 = t1.GetWorld();
@@ -28,12 +28,13 @@ namespace FlaxEngine.Tests
Matrix.Scaling(ref t1.Scale, out a2);
Matrix.RotationQuaternion(ref t1.Orientation, out m2);
Matrix.Multiply(ref a2, ref m2, out m1);
Matrix.Translation(ref t1.Translation, out m2);
Float3 translation = t1.Translation;
Matrix.Translation(ref translation, out m2);
Matrix.Multiply(ref m1, ref m2, out a2);
}
Matrix a3;
Matrix.Transformation(ref t1.Scale, ref t1.Orientation, ref t1.Translation, out a3);
t1.GetWorld(out a3);
Assert.AreEqual(a1, a2);
Assert.AreEqual(a1, a3);
@@ -45,8 +46,8 @@ namespace FlaxEngine.Tests
[Test]
public void TestLocalToWorld()
{
Transform t1 = new Transform(new Vector3(10, 1, 10), Quaternion.Euler(45, 0, -15), new Vector3(1.5f, 0.5f, 0.1f));
Transform t2 = new Transform(new Vector3(0, 20, 0), Quaternion.Euler(0, 0, 15), new Vector3(1.0f, 2.0f, 1.0f));
Transform t1 = new Transform(new Vector3(10, 1, 10), Quaternion.Euler(45, 0, -15), new Float3(1.5f, 0.5f, 0.1f));
Transform t2 = new Transform(new Vector3(0, 20, 0), Quaternion.Euler(0, 0, 15), new Float3(1.0f, 2.0f, 1.0f));
Transform a1 = t1.LocalToWorld(t2);
Vector3 a2 = t1.LocalToWorld(t2.Translation);
@@ -77,13 +78,13 @@ namespace FlaxEngine.Tests
[Test]
public void TestWorldToLocal()
{
Transform t1 = new Transform(new Vector3(10, 1, 10), Quaternion.Euler(45, 0, -15), new Vector3(1.5f, 0.5f, 0.1f));
Transform t2 = new Transform(new Vector3(0, 20, 0), Quaternion.Euler(0, 0, 15), new Vector3(1.0f, 2.0f, 1.0f));
Transform t1 = new Transform(new Vector3(10, 1, 10), Quaternion.Euler(45, 0, -15), new Float3(1.5f, 0.5f, 0.1f));
Transform t2 = new Transform(new Vector3(0, 20, 0), Quaternion.Euler(0, 0, 15), new Float3(1.0f, 2.0f, 1.0f));
Transform a1 = t1.WorldToLocal(t2);
Vector3 a2 = t1.WorldToLocal(t2.Translation);
Float3 a2 = t1.WorldToLocal(t2.Translation);
Vector3 a3;
Float3 a3;
{
Matrix scale, rotation, scaleRotation;
Matrix.Scaling(ref t1.Scale, out scale);
@@ -91,14 +92,14 @@ namespace FlaxEngine.Tests
Matrix.Multiply(ref scale, ref rotation, out scaleRotation);
Matrix.Invert(ref scaleRotation, out scale);
a3 = t2.Translation - t1.Translation;
Vector3.Transform(ref a3, ref scale, out a3);
Float3.Transform(ref a3, ref scale, out a3);
}
var a4T = new Vector3[1];
t1.WorldToLocal(new Vector3[1] { t2.Translation }, a4T);
Vector3 a4 = a4T[0];
Float3 a4 = a4T[0];
Assert.AreEqual(a1.Translation, a2);
Assert.AreEqual((Float3)a1.Translation, a2);
Assert.AreEqual(a2, a3);
Assert.AreEqual(a2, a4);
}
@@ -111,28 +112,28 @@ namespace FlaxEngine.Tests
{
Transform trans = new Transform(new Vector3(1, 2, 3));
Assert.AreEqual(new Vector3(1, 2, 3), trans.LocalToWorld(new Vector3(0, 0, 0)));
Assert.AreEqual(new Vector3(4, 4, 4), trans.LocalToWorld(new Vector3(3, 2, 1)));
Assert.AreEqual(new Vector3(-1, -2, -3), trans.WorldToLocal(new Vector3(0, 0, 0)));
Assert.AreEqual(new Vector3(0, 0, 0), trans.WorldToLocal(new Vector3(1, 2, 3)));
Assert.AreEqual(new Float3(1, 2, 3), (Float3)trans.LocalToWorld(new Float3(0, 0, 0)));
Assert.AreEqual(new Float3(4, 4, 4), (Float3)trans.LocalToWorld(new Float3(3, 2, 1)));
Assert.AreEqual(new Float3(-1, -2, -3), (Float3)trans.WorldToLocal(new Float3(0, 0, 0)));
Assert.AreEqual(new Float3(0, 0, 0), (Float3)trans.WorldToLocal(new Float3(1, 2, 3)));
trans = new Transform(Vector3.Zero, Quaternion.Euler(0, 90, 0));
Assert.AreEqual(new Vector3(0, 2, -1), trans.LocalToWorld(new Vector3(1, 2, 0)));
Assert.AreEqual(new Float3(0, 2, -1), (Float3)trans.LocalToWorld(new Float3(1, 2, 0)));
trans.Translation = new Vector3(1, 0, 0);
trans.Orientation = Quaternion.RotationX((float)Math.PI * 0.5f);
trans.Scale = new Vector3(2, 2, 2);
Assert.AreEqual(new Vector3(1, 0, 2), trans.LocalToWorld(new Vector3(0, 1, 0)));
Assert.AreEqual(new Float3(1, 0, 2), (Float3)trans.LocalToWorld(new Float3(0, 1, 0)));
Transform t1 = trans.LocalToWorld(Transform.Identity);
Assert.AreEqual(new Vector3(1.0f, 0, 0), t1.Translation);
Assert.AreEqual(new Float3(1.0f, 0, 0), (Float3)t1.Translation);
Assert.AreEqual(Quaternion.RotationX((float)Math.PI * 0.5f), t1.Orientation);
Assert.AreEqual(new Vector3(2.0f, 2.0f, 2.0f), t1.Scale);
Assert.AreEqual(new Float3(2.0f, 2.0f, 2.0f), t1.Scale);
Transform t2 = trans.WorldToLocal(Transform.Identity);
Assert.AreEqual(new Vector3(-0.5f, 0, 0), t2.Translation);
Assert.AreEqual(new Float3(-0.5f, 0, 0), (Float3)t2.Translation);
Assert.AreEqual(Quaternion.RotationX((float)Math.PI * -0.5f), t2.Orientation);
Assert.AreEqual(new Vector3(0.5f, 0.5f, 0.5f), t2.Scale);
Assert.AreEqual(new Float3(0.5f, 0.5f, 0.5f), t2.Scale);
var rand = new Random(10);
for (int i = 0; i < 10; i++)