Пример #1
0
        public void Create()
        {
            var M2x2 = new MatrixFloat2x2(1, 2, 3, 4);
            var M3x3 = new MatrixFloat3x3(1, 2, 3, 4, 5, 6, 7, 8, 9);
            var M4x4 = new MatrixFloat4x4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);

            using (var obj = SKUniform.Create("name", M2x2)) {
                Asserts.AreEqual(M2x2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value");
                Asserts.AreEqual(M2x2, CFunctions.GetMatrixFloat2x2(obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value");
                var tmp2 = new MatrixFloat2x2(9, 8, 7, 6);
                obj.MatrixFloat2x2Value = tmp2;
                Asserts.AreEqual(tmp2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value second");
                Asserts.AreEqual(tmp2, CFunctions.GetMatrixFloat2x2(obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value second");
            }

            using (var obj = SKUniform.Create("name", M3x3)) {
                Asserts.AreEqual(M3x3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value");
                Asserts.AreEqual(M3x3, CFunctions.GetMatrixFloat3x3(obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value");
                var tmp3 = new MatrixFloat3x3(9, 8, 7, 6, 5, 4, 3, 2, 1);
                obj.MatrixFloat3x3Value = tmp3;
                Asserts.AreEqual(tmp3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value second");
                Asserts.AreEqual(tmp3, CFunctions.GetMatrixFloat3x3(obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value second");
            }

            using (var obj = SKUniform.Create("name", M4x4)) {
                Asserts.AreEqual(M4x4, obj.MatrixFloat4x4Value, "13  MatrixFloat4x4Value");
                Asserts.AreEqual(M4x4, CFunctions.GetMatrixFloat4x4(obj, "matrixFloat4x4Value"), "13b FloatMatrix4Value");
                var tmp4 = new MatrixFloat4x4(9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6);
                obj.MatrixFloat4x4Value = tmp4;
                Asserts.AreEqual(tmp4, obj.MatrixFloat4x4Value, "13 MatrixFloat4x4Value second");
                Asserts.AreEqual(tmp4, CFunctions.GetMatrixFloat4x4(obj, "matrixFloat4x4Value"), "13b MatrixFloat4x4Value second");
            }
        }
Пример #2
0
        public void GetRotationMatrixTest()
        {
#if NET
            var matrix = NMatrix4.Identity;
#else
            var matrix = Matrix4.Identity;
#endif
            var V3 = new Vector3(1, 0, 0);

            using (var obj = new MDLTransform(matrix)) {
                obj.SetRotation(V3, 0);
                var expected = new MatrixFloat4x4(
                    1, 0, 0, 0,
                    0, (float)Math.Cos(1.0f), (float)-Math.Sin(1.0f), 0,
                    0, (float)Math.Sin(1.0f), (float)Math.Cos(1.0f), 0,
                    0, 0, 0, 1
                    );
#if NET
                Asserts.AreEqual(expected, obj.GetRotationMatrix(0), 0.00001f, "GetRotationMatrix");
#else
                Asserts.AreEqual((Matrix4)MatrixFloat4x4.Transpose(expected), obj.GetRotationMatrix(0), 0.00001f, "GetRotationMatrix");
                Asserts.AreEqual(expected, obj.GetRotationMatrix4x4(0), 0.00001f, "GetRotationMatrix4x4");
#endif
                Asserts.AreEqual(expected, CFunctions.MDLTransform_GetRotationMatrix(obj, 0), 0.00001f, "GetRotationMatrix4x4 native");
            }
        }
Пример #3
0
        public void RowConstructor()
        {
            var expected = GetTestMatrix();
            var actual   = new MatrixFloat4x4(expected.Row0, expected.Row1, expected.Row2, expected.Row3);

            Asserts.AreEqual(expected, actual, "ctor 1");
        }
Пример #4
0
        public void ElementConstructor()
        {
            var expected = GetTestMatrix();
            var actual   = new MatrixFloat4x4(expected.M11, expected.M12, expected.M13, expected.M14,
                                              expected.M21, expected.M22, expected.M23, expected.M24,
                                              expected.M31, expected.M32, expected.M33, expected.M34,
                                              expected.M41, expected.M42, expected.M43, expected.M44);

            Asserts.AreEqual(expected, actual, "ctor 1");
        }
Пример #5
0
        public void Multiply()
        {
            var inputL     = GetTestMatrix();
            var inputR     = GetTestMatrix();
            var inputSimdL = (MatrixFloat4x4)inputL;
            var inputSimdR = (MatrixFloat4x4)inputR;
            var expected   = Matrix4.Mult(inputL, inputR);
            var actual     = MatrixFloat4x4.Multiply(inputSimdL, inputSimdR);

            Asserts.AreEqual(expected, actual, "multiply");
        }
Пример #6
0
        public void ProjectionMatrix()
        {
            using (var obj = new MDLCamera()) {
                Assert.AreEqual(0.1f, obj.NearVisibilityDistance, 0.0001f, "NearVisibilityDistance");
                Assert.AreEqual(1000f, obj.FarVisibilityDistance, 0.0001f, "FarVisibilityDistance");
                Assert.AreEqual(54f, obj.FieldOfView, 0.0001f, "FieldOfView");
#if NET
                var initialProjectionMatrix = new NMatrix4(
                    1.308407f, 0, 0, 0,
                    0, 1.962611f, 0, 0,
                    0, 0, -1.0002f, -0.20002f,
                    0, 0, -1, 0
                    );
#else
                var initialProjectionMatrix = new Matrix4(
                    1.308407f, 0, 0, 0,
                    0, 1.962611f, 0, 0,
                    0, 0, -1.0002f, -1,
                    0, 0, -0.20002f, 0
                    );
#endif
                Asserts.AreEqual(initialProjectionMatrix, obj.ProjectionMatrix, 0.0001f, "Initial");
#if NET
                Asserts.AreEqual(initialProjectionMatrix, CFunctions.GetMatrixFloat4x4(obj, "projectionMatrix"), 0.0001f, "Initial native");
#else
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)initialProjectionMatrix), obj.ProjectionMatrix4x4, 0.0001f, "Initial 4x4");
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)initialProjectionMatrix), CFunctions.GetMatrixFloat4x4(obj, "projectionMatrix"), 0.0001f, "Initial native");
#endif

                obj.NearVisibilityDistance = 1.0f;
#if NET
                var modifiedProjectionMatrix = new NMatrix4(
                    1.308407f, 0, 0, 0,
                    0, 1.962611f, 0, 0,
                    0, 0, -1.002002f, -2.002002f,
                    0, 0, -1, 0
                    );
#else
                var modifiedProjectionMatrix = new Matrix4(
                    1.308407f, 0, 0, 0,
                    0, 1.962611f, 0, 0,
                    0, 0, -1.002002f, -1,
                    0, 0, -2.002002f, 0
                    );
#endif
                Asserts.AreEqual(modifiedProjectionMatrix, obj.ProjectionMatrix, 0.0001f, "Second");
#if NET
                Asserts.AreEqual(modifiedProjectionMatrix, CFunctions.GetMatrixFloat4x4(obj, "projectionMatrix"), 0.0001f, "Second native");
#else
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)modifiedProjectionMatrix), obj.ProjectionMatrix4x4, 0.0001f, "Second 4x4");
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)modifiedProjectionMatrix), CFunctions.GetMatrixFloat4x4(obj, "projectionMatrix"), 0.0001f, "Second native");
#endif
            }
        }
Пример #7
0
        public void TransposeStatic_ByRef()
        {
            var input     = GetTestMatrix();
            var inputSimd = (MatrixFloat4x4)input;

            Matrix4        expected;
            MatrixFloat4x4 actual;

            Matrix4.Transpose(ref input, out expected);
            MatrixFloat4x4.Transpose(ref inputSimd, out actual);
            Asserts.AreEqual(expected, actual, "transpose out/ref");
        }
Пример #8
0
        public void Identity()
        {
            var identity = new MatrixFloat4x4 {
                M11 = 1f,
                M22 = 1f,
                M33 = 1f,
                M44 = 1f,
            };

            Asserts.AreEqual(identity, MatrixFloat4x4.Identity, "identity");
#if !NET
            Asserts.AreEqual(Matrix4.Identity, MatrixFloat4x4.Identity, "opentk identity");
#endif
        }
Пример #9
0
        public void Multiply_ByRef()
        {
            var            inputL     = GetTestMatrix();
            var            inputR     = GetTestMatrix();
            var            inputSimdL = (MatrixFloat4x4)inputL;
            var            inputSimdR = (MatrixFloat4x4)inputR;
            Matrix4        expected;
            MatrixFloat4x4 actual;

            Matrix4.Mult(ref inputL, ref inputR, out expected);
            MatrixFloat4x4.Multiply(ref inputSimdL, ref inputSimdR, out actual);

            Asserts.AreEqual(expected, actual, "multiply");
        }
        public virtual Matrix4 [] GetNMatrix4Values()
        {
            var count    = ElementCount;
            var timesArr = new Matrix4 [(int)count];

            unsafe {
                int typeSize = sizeof(Matrix4);

                fixed(Matrix4 *arrptr = timesArr)
                MDLMemoryHelper.FetchValues(typeSize, (IntPtr)arrptr, count, _GetFloat4x4Array);
            }

            return(timesArr);
        }
Пример #11
0
        public void TransposeStatic()
        {
            var input     = GetTestMatrix();
            var inputSimd = (MatrixFloat4x4)input;

            var expected = Matrix4.Transpose(input);
            var actual   = MatrixFloat4x4.Transpose(inputSimd);

            Asserts.AreEqual(expected, actual, "transpose");

            input     = GetTestMatrix();
            inputSimd = (MatrixFloat4x4)input;
            Matrix4.Transpose(ref input, out expected);
            MatrixFloat4x4.Transpose(ref inputSimd, out actual);
            Asserts.AreEqual(expected, actual, "transpose out/ref");
        }
Пример #12
0
        public void MatrixTest()
        {
#if NET
            var m4 = new NMatrix4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
#else
            var m4   = new Matrix4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
            var m4x4 = (MatrixFloat4x4)m4;
#endif

            using (var obj = new MDLTransform()) {
                // identity
                Asserts.AreEqual(Matrix4.Identity, obj.Matrix, "Initial identity");
#if NET
                Asserts.AreEqual(MatrixFloat4x4.Identity, obj.Matrix, "Initial identity 4x4");
#else
                Asserts.AreEqual(MatrixFloat4x4.Identity, obj.GetMatrix4x4(), "Initial identity 4x4");
#endif
                Asserts.AreEqual(MatrixFloat4x4.Identity, CFunctions.GetMatrixFloat4x4(obj, "matrix"), "Initial identity native");

                // translate the transform somewhere
                obj.SetTranslation(new Vector3(2, 2, 2), 0);

                // the matrix should now be a translation matrix like this:
                //   1 0 0 0 2
                //   0 1 0 0 2
                //   0 0 1 0 2
                //   0 0 0 1 0
#if !NET
                // but since Matrix4 is transposed when compared to MatrixFloat4x4, we get this:

                Asserts.AreEqual(new Matrix4(
                                     1, 0, 0, 0,
                                     0, 1, 0, 0,
                                     0, 0, 1, 0,
                                     2, 2, 2, 1
                                     ), obj.Matrix, "Translated");

                // The 4x4 version is correct:
#endif
                Asserts.AreEqual(new Matrix4(
                                     1, 0, 0, 2,
                                     0, 1, 0, 2,
                                     0, 0, 1, 2,
                                     0, 0, 0, 1
#if NET
                                     ), obj.Matrix, "Translated 4x4");
Пример #13
0
 public static void AreEqual(MatrixFloat4x4 expected, Matrix4 actual, string message)
 {
     AreEqual(expected.M11, actual.M11, message + " (M11)");
     AreEqual(expected.M21, actual.M21, message + " (M21)");
     AreEqual(expected.M31, actual.M31, message + " (M31)");
     AreEqual(expected.M41, actual.M41, message + " (M41)");
     AreEqual(expected.M12, actual.M12, message + " (M12)");
     AreEqual(expected.M22, actual.M22, message + " (M22)");
     AreEqual(expected.M32, actual.M32, message + " (M32)");
     AreEqual(expected.M42, actual.M42, message + " (M42)");
     AreEqual(expected.M13, actual.M13, message + " (M13)");
     AreEqual(expected.M23, actual.M23, message + " (M23)");
     AreEqual(expected.M33, actual.M33, message + " (M33)");
     AreEqual(expected.M43, actual.M43, message + " (M43)");
     AreEqual(expected.M14, actual.M14, message + " (M14)");
     AreEqual(expected.M24, actual.M24, message + " (M24)");
     AreEqual(expected.M34, actual.M34, message + " (M34)");
     AreEqual(expected.M44, actual.M44, message + " (M44)");
 }
Пример #14
0
 public static void AreEqual(MatrixFloat4x4 expected, Matrix4 actual, string message)
 {
     AreEqual(expected.M11, actual.M11, $"{message} (M11) expected: {expected} actual: {actual}");
     AreEqual(expected.M21, actual.M21, $"{message} (M21) expected: {expected} actual: {actual}");
     AreEqual(expected.M31, actual.M31, $"{message} (M31) expected: {expected} actual: {actual}");
     AreEqual(expected.M41, actual.M41, $"{message} (M41) expected: {expected} actual: {actual}");
     AreEqual(expected.M12, actual.M12, $"{message} (M12) expected: {expected} actual: {actual}");
     AreEqual(expected.M22, actual.M22, $"{message} (M22) expected: {expected} actual: {actual}");
     AreEqual(expected.M32, actual.M32, $"{message} (M32) expected: {expected} actual: {actual}");
     AreEqual(expected.M42, actual.M42, $"{message} (M42) expected: {expected} actual: {actual}");
     AreEqual(expected.M13, actual.M13, $"{message} (M13) expected: {expected} actual: {actual}");
     AreEqual(expected.M23, actual.M23, $"{message} (M23) expected: {expected} actual: {actual}");
     AreEqual(expected.M33, actual.M33, $"{message} (M33) expected: {expected} actual: {actual}");
     AreEqual(expected.M43, actual.M43, $"{message} (M43) expected: {expected} actual: {actual}");
     AreEqual(expected.M14, actual.M14, $"{message} (M14) expected: {expected} actual: {actual}");
     AreEqual(expected.M24, actual.M24, $"{message} (M24) expected: {expected} actual: {actual}");
     AreEqual(expected.M34, actual.M34, $"{message} (M34) expected: {expected} actual: {actual}");
     AreEqual(expected.M44, actual.M44, $"{message} (M44) expected: {expected} actual: {actual}");
 }
Пример #15
0
        public void Ctors()
        {
#if NET
            var id = NMatrix4.Identity;
#else
            Matrix4 id = Matrix4.Identity;
#endif
            var V3 = new Vector3(1, 2, 3);

            using (var obj = new MDLTransform(id)) {
                Asserts.AreEqual(Vector3.Zero, obj.Translation, "Translation");
                Asserts.AreEqual(Vector3.One, obj.Scale, "Scale");
                Asserts.AreEqual(Vector3.Zero, obj.Rotation, "Rotation");
                Asserts.AreEqual(id, obj.Matrix, "Matrix");
                if (TestRuntime.CheckXcodeVersion(8, 0))
                {
                    Asserts.AreEqual(false, obj.ResetsTransform, "ResetsTransform");
                }

                obj.Translation = V3;
                Asserts.AreEqual(V3, obj.Translation, "Translation 2");
            }

            if (TestRuntime.CheckXcodeVersion(8, 0))
            {
                using (var obj = new MDLTransform(id, true)) {
                    Asserts.AreEqual(Vector3.Zero, obj.Translation, "Translation");
                    Asserts.AreEqual(Vector3.One, obj.Scale, "Scale");
                    Asserts.AreEqual(Vector3.Zero, obj.Rotation, "Rotation");
                    Asserts.AreEqual(id, obj.Matrix, "Matrix");
                    Asserts.AreEqual(true, obj.ResetsTransform, "ResetsTransform");

                    obj.Translation = V3;
                    Asserts.AreEqual(V3, obj.Translation, "Translation 2");
                }
            }

            using (var obj = new MDLTransform(id)) {
                V3       *= 2;
                obj.Scale = V3;
                Asserts.AreEqual(V3, obj.Scale, "Scale 2");
            }

            using (var obj = new MDLTransform(id)) {
                V3          *= 2;
                obj.Rotation = V3;
                Asserts.AreEqual(V3, obj.Rotation, "Rotation 2");
            }

            using (var obj = new MDLTransform(id)) {
                V3          *= 2;
                obj.Rotation = V3;
                Asserts.AreEqual(V3, obj.Rotation, "Rotation 2");
            }

#if NET
            var m4 = new NMatrix4(
                4, 0, 0, 2,
                0, 3, 0, 3,
                0, 0, 2, 4,
                0, 0, 0, 1);
#else
            var m4 = new Matrix4(
                4, 0, 0, 0,
                0, 3, 0, 0,
                0, 0, 2, 0,
                2, 3, 4, 1);
#endif

            using (var obj = new MDLTransform(m4)) {
                Asserts.AreEqual(Vector3.Zero, obj.Rotation, "Rotation 3");
                Asserts.AreEqual(new Vector3(4, 3, 2), obj.Scale, "Scale 3");
                Asserts.AreEqual(new Vector3(2, 3, 4), obj.Translation, "Translation 3");
                Asserts.AreEqual(m4, obj.Matrix, 0.0001f, "Matrix 3");
            }

#if !NET
            var m4x4 = new MatrixFloat4x4(
                4, 0, 0, 2,
                0, 3, 0, 3,
                0, 0, 2, 4,
                0, 0, 0, 1);
            using (var obj = new MDLTransform(m4x4)) {
                Asserts.AreEqual(Vector3.Zero, obj.Rotation, "Rotation 4");
                Asserts.AreEqual(new Vector3(4, 3, 2), obj.Scale, "Scale 4");
                Asserts.AreEqual(new Vector3(2, 3, 4), obj.Translation, "Translation 4");
#if NET
                Asserts.AreEqual(m4x4, obj.Matrix, 0.0001f, "Matrix4x4 4");
#else
                Asserts.AreEqual(m4x4, obj.GetMatrix4x4(), 0.0001f, "Matrix4x4 4");
#endif
                Asserts.AreEqual(m4x4, CFunctions.GetMatrixFloat4x4(obj, "matrix"), 0.0001f, "Matrix4x4-native 4");
            }
#endif
        }
Пример #16
0
        public void Ctors()
        {
            SKTexture texture;

#if !NET
            Vector2 V2;
            Vector3 V3;
            Vector4 V4;
            Matrix2 M2;
            Matrix3 M3;
            Matrix4 M4;
#endif
            MatrixFloat2x2 M2x2;
            MatrixFloat3x3 M3x3;
            MatrixFloat4x4 M4x4;

            using (var obj = new SKUniform("name")) {
#if !NET
                var M4Zero = new Matrix4(Vector4.Zero, Vector4.Zero, Vector4.Zero, Vector4.Zero);
#endif
                var N4Zero = default(NMatrix4);
                var N3Zero = default(NMatrix3);
                var N2Zero = default(NMatrix2);

                Assert.AreEqual("name", obj.Name, "1 Name");
                Assert.AreEqual(SKUniformType.None, obj.UniformType, "1 UniformType");
                Assert.IsNull(obj.TextureValue, "1 TextureValue");
                Assert.AreEqual(0.0f, obj.FloatValue, "1 FloatValue");
#if !NET
                Asserts.AreEqual(Vector2.Zero, obj.FloatVector2Value, "1 FloatVector2Value");
                Asserts.AreEqual(Vector3.Zero, obj.FloatVector3Value, "1 FloatVector3Value");
                Asserts.AreEqual(Vector4.Zero, obj.FloatVector4Value, "1 FloatVector4Value");
                Asserts.AreEqual(Matrix2.Zero, obj.FloatMatrix2Value, "1 FloatMatrix2Value");
#endif
                Asserts.AreEqual(N2Zero, obj.MatrixFloat2x2Value, "1 MatrixFloat2x2Value");
#if !NET
                Asserts.AreEqual(Matrix3.Zero, obj.FloatMatrix3Value, "1 FloatMatrix3Value");
#endif
                Asserts.AreEqual(N3Zero, obj.MatrixFloat3x3Value, "1 MatrixFloat3x3Value");
#if !NET
                Asserts.AreEqual(M4Zero, obj.FloatMatrix4Value, "1 FloatMatrix4Value");
#endif
                Asserts.AreEqual(N4Zero, obj.MatrixFloat4x4Value, "1 MatrixFloat4x4Value");

                texture = SKTexture.FromImageNamed("basn3p08.png");
#if !NET
                V2   = new Vector2(1, 2);
                V3   = new Vector3(3, 4, 5);
                V4   = new Vector4(6, 7, 8, 9);
                M2   = new Matrix2(1, 2, 3, 4);
                M3   = new Matrix3(1, 2, 3, 4, 5, 6, 7, 8, 9);
                M4   = new Matrix4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
                M2x2 = (MatrixFloat2x2)M2;
                M3x3 = (MatrixFloat3x3)M3;
                M4x4 = (MatrixFloat4x4)M4;
#endif
                obj.TextureValue = texture;
                Assert.AreEqual(texture, obj.TextureValue, "2 TextureValue");

                obj.FloatValue = 0.5f;
                Assert.AreEqual(0.5f, obj.FloatValue, "2 FloatValue");

#if !NET
                obj.FloatVector2Value = V2;
                Asserts.AreEqual(V2, obj.FloatVector2Value, "2 FloatVector2Value");

                obj.FloatVector3Value = V3;
                Asserts.AreEqual(V3, obj.FloatVector3Value, "2 FloatVector3Value");

                obj.FloatVector4Value = V4;
                Asserts.AreEqual(V4, obj.FloatVector4Value, "2 FloatVector4Value");

                obj.FloatMatrix2Value = M2;
                Asserts.AreEqual(M2, obj.FloatMatrix2Value, "2 FloatMatrix2Value");
                obj.MatrixFloat2x2Value = M2x2;
                Asserts.AreEqual(M2x2, obj.MatrixFloat2x2Value, "2 MatrixFloat2x2Value");

                obj.FloatMatrix3Value = M3;
                Asserts.AreEqual(M3, obj.FloatMatrix3Value, "2 FloatMatrix3Value");
                obj.MatrixFloat3x3Value = M3x3;
                Asserts.AreEqual(M3x3, obj.MatrixFloat3x3Value, "2 MatrixFloat3x3Value");

                obj.FloatMatrix4Value = M4;
                Asserts.AreEqual(M4, obj.FloatMatrix4Value, "2 FloatMatrix4Value");
                obj.MatrixFloat4x4Value = M4x4;
                Asserts.AreEqual(M4x4, obj.MatrixFloat4x4Value, "2 MatrixFloat4x4Value");
#endif
            }

            bool hasSimdConstructors = TestRuntime.CheckXcodeVersion(8, 0);
            using (var obj = new SKUniform("name", texture)) {
                Assert.AreEqual(texture, obj.TextureValue, "3 TextureValue");
            }

            using (var obj = new SKUniform("name", 3.1415f)) {
                Assert.AreEqual(3.1415f, obj.FloatValue, "4 FloatValue");
            }

#if !NET
            using (var obj = new SKUniform("name", V2)) {
                Asserts.AreEqual(V2, obj.FloatVector2Value, "5 FloatVector2Value");
            }

            using (var obj = new SKUniform("name", V3)) {
                Asserts.AreEqual(V3, obj.FloatVector3Value, "6 FloatVector3Value");
            }

            using (var obj = new SKUniform("name", V4)) {
                Asserts.AreEqual(V4, obj.FloatVector4Value, "7 FloatVector4Value");
            }

#if !NET
            using (var obj = new SKUniform("name", M2)) {
                Asserts.AreEqual(M2, obj.FloatMatrix2Value, "8 FloatMatrix2Value");
                Asserts.AreEqual(M2, MatrixFloat2x2.Transpose(CFunctions.GetMatrixFloat2x2(obj, "matrixFloat2x2Value")), "8b FloatMatrix2Value");
            }

            using (var obj = new SKUniform("name", M3)) {
                Asserts.AreEqual(M3, obj.FloatMatrix3Value, "9 FloatMatrix3Value");
                Asserts.AreEqual(M3, MatrixFloat3x3.Transpose(CFunctions.GetMatrixFloat3x3(obj, "matrixFloat3x3Value")), "9b FloatMatrix3Value");
            }

            using (var obj = new SKUniform("name", M4)) {
                Asserts.AreEqual(M4, obj.FloatMatrix4Value, "10 FloatMatrix4Value");
                Asserts.AreEqual(M4, MatrixFloat4x4.Transpose(CFunctions.GetMatrixFloat4x4(obj, "matrixFloat4x4Value")), "10b FloatMatrix4Value");
            }
#endif

            using (var obj = new SKUniform("name", M2x2)) {
                Asserts.AreEqual(M2x2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value");
                Asserts.AreEqual(M2x2, CFunctions.GetMatrixFloat2x2(obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value");
                var tmp2 = new MatrixFloat2x2(9, 8, 7, 6);
                obj.MatrixFloat2x2Value = tmp2;
                Asserts.AreEqual(tmp2, obj.MatrixFloat2x2Value, "11 MatrixFloat2x2Value second");
                Asserts.AreEqual(tmp2, CFunctions.GetMatrixFloat2x2(obj, "matrixFloat2x2Value"), "11b MatrixFloat2x2Value second");
            }

            using (var obj = new SKUniform("name", M3x3)) {
                Asserts.AreEqual(M3x3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value");
                Asserts.AreEqual(M3x3, CFunctions.GetMatrixFloat3x3(obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value");
                var tmp3 = new MatrixFloat3x3(9, 8, 7, 6, 5, 4, 3, 2, 1);
                obj.MatrixFloat3x3Value = tmp3;
                Asserts.AreEqual(tmp3, obj.MatrixFloat3x3Value, "12 MatrixFloat3x3Value second");
                Asserts.AreEqual(tmp3, CFunctions.GetMatrixFloat3x3(obj, "matrixFloat3x3Value"), "12b MatrixFloat3x3Value second");
            }

            using (var obj = new SKUniform("name", M4x4)) {
                Asserts.AreEqual(M4x4, obj.MatrixFloat4x4Value, "13  MatrixFloat4x4Value");
                Asserts.AreEqual(M4x4, CFunctions.GetMatrixFloat4x4(obj, "matrixFloat4x4Value"), "13b FloatMatrix4Value");
                var tmp4 = new MatrixFloat4x4(9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6);
                obj.MatrixFloat4x4Value = tmp4;
                Asserts.AreEqual(tmp4, obj.MatrixFloat4x4Value, "13 MatrixFloat4x4Value second");
                Asserts.AreEqual(tmp4, CFunctions.GetMatrixFloat4x4(obj, "matrixFloat4x4Value"), "13b MatrixFloat4x4Value second");
            }
#endif
        }
Пример #17
0
        public void Ctors()
        {
            Vector2 V2;
            Vector3 V3;
            Vector4 V4;

#if NET
            NMatrix4 M4;
#else
            Matrix4        M4;
            MatrixFloat4x4 M4x4;
#endif
            MDLTextureSampler tsv;
            NSUrl             url;

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion)) {
                Assert.AreEqual(MDLMaterialSemantic.AmbientOcclusion, obj.Semantic, "1 Semantic");
                Assert.IsNull(obj.Color, "1 Color");
                Asserts.AreEqual(Vector2.Zero, obj.Float2Value, "1 Float2Value");
                Asserts.AreEqual(Vector3.Zero, obj.Float3Value, "1 Float3Value");
                Asserts.AreEqual(Vector4.Zero, obj.Float4Value, "1 Float4Value");
                Assert.AreEqual(0.0f, obj.FloatValue, "1 FloatValue");
                Asserts.AreEqual(Matrix4.Identity, obj.Matrix4x4, "1 Matrix4x4");
                Assert.AreEqual("name", obj.Name, "1 Name");
                Assert.IsNull(obj.StringValue, "1 StringValue");
                Assert.IsNull(obj.TextureSamplerValue, "1 TextureSamplerValue");
                Assert.AreEqual(MDLMaterialPropertyType.Float, obj.Type, "1 Type");
                Assert.IsNull(obj.UrlValue, "1 UrlValue");

                V2 = new Vector2(1, 2);
                V3 = new Vector3(3, 4, 5);
                V4 = new Vector4(6, 7, 8, 9);
#if NET
                M4 = new NMatrix4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
#else
                M4   = new Matrix4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
                M4x4 = new MatrixFloat4x4(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
#endif
                tsv = new MDLTextureSampler();
                url = new NSUrl("http://xamarin.com");

                obj.Semantic = MDLMaterialSemantic.Anisotropic;
                Assert.AreEqual(MDLMaterialSemantic.Anisotropic, obj.Semantic, "2 Semantic");

                obj.Color = UIColor.Blue.CGColor;
                Assert.AreEqual(UIColor.Blue.CGColor.ToString(), obj.Color.ToString(), "2 Color");

                obj.Float2Value = V2;
                Asserts.AreEqual(V2, obj.Float2Value, "2 Float2Value");

                obj.Float3Value = V3;
                Asserts.AreEqual(V3, obj.Float3Value, "2 Float3Value");

                obj.Float4Value = V4;
                Asserts.AreEqual(V4, obj.Float4Value, "2 Float4Value");

                obj.FloatValue = 3.14f;
                Assert.AreEqual(3.14f, obj.FloatValue, "2 FloatValue");

                obj.Matrix4x4 = M4;
                // It looks like the Matrix4 setter is ignored, assigning a matrix
                // doesn't work in Xcode either.
                Asserts.AreEqual(Matrix4.Identity, obj.Matrix4x4, "2 Matrix4x4");

                obj.Name = "new name";
                Assert.AreEqual("new name", obj.Name, "2 Name");

                obj.StringValue = "string value";
                Assert.AreEqual("string value", obj.StringValue, "2 StringValue");

                obj.TextureSamplerValue = tsv;
                Assert.AreEqual(tsv.Handle, obj.TextureSamplerValue.Handle, "2 TextureSamplerValue");

                Assert.AreEqual(MDLMaterialPropertyType.Texture, obj.Type, "2 Type");

                // Looks like the URLValue can't change after construction
                obj.UrlValue = url;
                if (TestRuntime.CheckXcodeVersion(9, 0))
                {
                    Assert.AreSame(url, obj.UrlValue, "2 UrlValue");
                }
                else
                {
                    Assert.IsNull(obj.UrlValue, "2 UrlValue");
                }
            }


            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, url)) {
                Assert.AreEqual(url.Handle, obj.UrlValue.Handle, "3 UrlValue");
            }

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, V3)) {
                Asserts.AreEqual(V3, obj.Float3Value, "4 Float3Value");
            }

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, tsv)) {
                Assert.AreEqual(tsv.Handle, obj.TextureSamplerValue.Handle, "5 TextureSamplerValue");
            }

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, "string value")) {
                Assert.AreEqual("string value", obj.StringValue, "6 StringValue");
            }

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, M4)) {
                Asserts.AreEqual(M4, obj.Matrix4x4, "7 Matrix4x4");
#if NET
                Asserts.AreEqual(CFunctions.GetMatrixFloat4x4(obj, "matrix4x4"), obj.Matrix4x4, "7b MatrixFloat4x4");
                Asserts.AreEqual(M4, obj.Matrix4x4, "7c MatrixFloat4x4");
#else
                Asserts.AreEqual(CFunctions.GetMatrixFloat4x4(obj, "matrix4x4"), obj.MatrixFloat4x4, "7b MatrixFloat4x4");
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)M4), obj.MatrixFloat4x4, "7c MatrixFloat4x4");
#endif
            }

#if !NET
            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, M4x4)) {
                Asserts.AreEqual(CFunctions.GetMatrixFloat4x4(obj, "matrix4x4"), obj.MatrixFloat4x4, "7' MatrixFloat4x4");
                Asserts.AreEqual(M4x4, obj.MatrixFloat4x4, "7'b MatrixFloat4x4");
            }
#endif
            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, V4)) {
                Asserts.AreEqual(V4, obj.Float4Value, "8 Float4Value");
            }

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, UIColor.Red.CGColor)) {
                Assert.AreEqual(UIColor.Blue.CGColor.ToString(), obj.Color.ToString(), "9 Color");
            }

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, V2)) {
                Asserts.AreEqual(V2, obj.Float2Value, "10 Float2Value");
            }

            using (var obj = new MDLMaterialProperty("name", MDLMaterialSemantic.AmbientOcclusion, 3.1415f)) {
                Assert.AreEqual(3.1415f, obj.FloatValue, "11 FloatValue");
            }
        }
Пример #18
0
 public static MatrixFloat4x4 CreateGlobalTransform4x4(MDLObject obj, double atTime)
 {
     return(MatrixFloat4x4.Transpose((MatrixFloat4x4)CreateGlobalTransform(obj, atTime)));
 }
        public void Properties()
        {
            using (var obj = new MDLStereoscopicCamera()) {
                Assert.AreEqual(63f, obj.InterPupillaryDistance, "InterPupillaryDistance");
                Assert.AreEqual(0f, obj.LeftVergence, "LeftVergence");
                Assert.AreEqual(0f, obj.RightVergence, "RightVergence");
                Assert.AreEqual(0f, obj.Overlap, "Overlap");

#if NET
                var mat1 = new Matrix4(
                    1, 0, 0, -0.63f,
                    0, 1, 0, 0,
                    0, 0, 1, 0,
                    0, 0, 0, 1);
#else
                var mat1 = new Matrix4(
                    1, 0, 0, 0,
                    0, 1, 0, 0,
                    0, 0, 1, 0,
                    -0.63f, 0, 0, 1);
#endif
                Asserts.AreEqual(mat1, obj.LeftViewMatrix, "LeftViewMatrix");
#if NET
                Asserts.AreEqual(mat1, CFunctions.GetMatrixFloat4x4(obj, "leftViewMatrix"), "LeftViewMatrix4x4 native");
#else
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat1), obj.LeftViewMatrix4x4, "LeftViewMatrix4x4");
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat1), CFunctions.GetMatrixFloat4x4(obj, "leftViewMatrix"), "LeftViewMatrix4x4 native");
#endif

#if NET
                var mat2 = new NMatrix4(
                    1, 0, 0, 0.63f,
                    0, 1, 0, 0,
                    0, 0, 1, 0,
                    0, 0, 0, 1);
#else
                var mat2 = new Matrix4(
                    1, 0, 0, 0,
                    0, 1, 0, 0,
                    0, 0, 1, 0,
                    0.63f, 0, 0, 1);
#endif
                Asserts.AreEqual(mat2, obj.RightViewMatrix, "RightViewMatrix");
#if NET
                Asserts.AreEqual(mat2, CFunctions.GetMatrixFloat4x4(obj, "rightViewMatrix"), "RightViewMatrix4x4 native");
#else
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat2), obj.RightViewMatrix4x4, "RightViewMatrix4x4");
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat2), CFunctions.GetMatrixFloat4x4(obj, "rightViewMatrix"), "RightViewMatrix4x4 native");
#endif

#if NET
                var mat3 = new Matrix4(
                    1.308407f, 0, 0, 0,
                    0, 1.962611f, 0, 0,
                    0, 0, -1.0002f, -0.20002f,
                    0, 0, -1, 0);
#else
                var mat3 = new Matrix4(
                    1.308407f, 0, 0, 0,
                    0, 1.962611f, 0, 0,
                    0, 0, -1.0002f, -1,
                    0, 0, -0.20002f, 0);
#endif
                Asserts.AreEqual(mat3, obj.LeftProjectionMatrix, 0.0001f, "LeftProjectionMatrix");
#if NET
                Asserts.AreEqual(mat3, CFunctions.GetMatrixFloat4x4(obj, "leftProjectionMatrix"), 0.0001f, "LeftProjectionMatrix4x4 native");
#else
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat3), obj.LeftProjectionMatrix4x4, 0.0001f, "LeftProjectionMatrix4x4");
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat3), CFunctions.GetMatrixFloat4x4(obj, "leftProjectionMatrix"), 0.0001f, "LeftProjectionMatrix4x4 native");
#endif

                Asserts.AreEqual(mat3, obj.RightProjectionMatrix, 0.0001f, "RightProjectionMatrix");
#if NET
                Asserts.AreEqual(mat3, CFunctions.GetMatrixFloat4x4(obj, "rightProjectionMatrix"), 0.0001f, "RightProjectionMatrix4x4 native");
#else
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat3), obj.RightProjectionMatrix4x4, 0.0001f, "RightProjectionMatrix4x4");
                Asserts.AreEqual(MatrixFloat4x4.Transpose((MatrixFloat4x4)mat3), CFunctions.GetMatrixFloat4x4(obj, "rightProjectionMatrix"), 0.0001f, "RightProjectionMatrix4x4 native");
#endif
            }
        }