Example #1
0
        static SKMatrix44 GetMatrix(VoxelData voxelData, int size)
        {
            var r      = 1.61803398875f;
            var d      = size / (r * voxelData.size.MaxDimension);
            var tran   = SKMatrix44.CreateTranslate(size * 0.5f, size * 0.5f, 0);
            var rotx   = SKMatrix44.CreateRotationDegrees(1, 0, 0, -26f);
            var roty   = SKMatrix44.CreateRotationDegrees(0, 1, 0, 45);
            var matrix = SKMatrix44.CreateIdentity();

            matrix.PreConcat(tran);
            matrix.PreConcat(rotx);
            matrix.PreConcat(roty);
            matrix.PreScale(d, -d, d);
            matrix.PreTranslate(-voxelData.size.X * 0.5f, -voxelData.size.Z * 0.5f, voxelData.size.Y * 0.5f);
            return(matrix);
        }
Example #2
0
        public void Matrix44MapsScalars()
        {
            // translate
            var matrixTranslate = SKMatrix44.CreateTranslate(10, 20, 0);

            var resultTranslateZero  = matrixTranslate.MapScalars(0, 0, 0, 1);
            var resultTranslateValue = matrixTranslate.MapScalars(5, 25, 0, 1);

            Assert.Equal(new[] { 10f, 20f, 0f, 1f }, resultTranslateZero);
            Assert.Equal(new[] { 15f, 45f, 0f, 1f }, resultTranslateValue);

            // rotate
            var matrixRotate = SKMatrix44.CreateRotationDegrees(0, 1, 0, 90);

            var resultRotateZero  = matrixRotate.MapScalars(0, 0, 0, 1);
            var resultRotateValue = matrixRotate.MapScalars(5, 25, 0, 1);

            Assert.Equal(new[] { 0f, 0f, 0f, 1f }, resultRotateZero);
            Assert.Equal(new[] { 0f, 25f, -5f, 1f }, resultRotateValue.Select(v => (int)(v / EPSILON) * EPSILON));
        }
Example #3
0
        public void Matrix44MapsPointsBulk()
        {
            var rnd = new Random();

            var matrixTranslate = SKMatrix44.CreateTranslate(10, 25, 0);

            // generate some points
            var points  = new SKPoint[1000];
            var results = new SKPoint[points.Length];

            for (int i = 0; i < points.Length; i++)
            {
                points[i]  = new SKPoint(rnd.Next(1000) / 10f, rnd.Next(1000) / 10f);
                results[i] = new SKPoint(points[i].X + 10, points[i].Y + 25);
            }

            var actualResults = matrixTranslate.MapPoints(points);

            Assert.Equal(results, actualResults);
        }
Example #4
0
        public void Matrix44MapsPoints()
        {
            // translate
            var matrixTranslate = SKMatrix44.CreateTranslate(10, 20, 0);

            var resultTranslateZero  = matrixTranslate.MapPoint(SKPoint.Empty);
            var resultTranslateValue = matrixTranslate.MapPoint(new SKPoint(5, 25));

            Assert.Equal(new SKPoint(10f, 20f), resultTranslateZero);
            Assert.Equal(new SKPoint(15f, 45f), resultTranslateValue);

            // rotate
            var matrixRotate = SKMatrix44.CreateRotationDegrees(0, 1, 0, 90);

            var resultRotateZero  = matrixRotate.MapPoint(SKPoint.Empty);
            var resultRotateValue = matrixRotate.MapPoint(new SKPoint(5, 25));

            Assert.Equal(new SKPoint(0f, 0f), resultRotateZero);
            Assert.Equal(0, resultRotateValue.X, PRECISION);
            Assert.Equal(25, resultRotateValue.Y, PRECISION);
        }