public void GenerateVertexList_Test3()
        {
            // Arrange
            VoxelCorners <byte> densities = new VoxelCorners <byte>
            {
                Corner1 = 140,
                Corner2 = 25,
                Corner3 = 189,
                Corner4 = 89,
                Corner5 = 192,
                Corner6 = 204,
                Corner7 = 255,
                Corner8 = 229
            };

            byte isolevel  = 191;
            int  edgeIndex = 0b1111_0000_0000;

            VertexList expected = new VertexList();

            expected[8]  = new float3(-56f, -0.02439022f, 9f);
            expected[9]  = new float3(-55f, -0.07142866f, 9f);
            expected[10] = new float3(-55f, -0.9803922f, 10f);
            expected[11] = new float3(-56f, -0.272727272727f, 10f);

            // Act
            IEnumerable <float3> actual = MarchingCubesFunctions.GenerateVertexList(densities, new int3(-56, -1, 9), edgeIndex, isolevel);

            // Assert
            for (int i = 0; i < 12; i++)
            {
                var actualPosition = actual.ElementAt(i);
                Assert.AreEqual(0, math.distance(expected[i], actualPosition), 0.011f, $"Expected: {expected[i]}, Actual: {actualPosition}");
            }
        }
        public void GenerateVertexList_Test1()
        {
            // Arrange
            VoxelCorners <byte> densities = new VoxelCorners <byte>
            {
                Corner1 = 255,
                Corner2 = 255,
                Corner3 = 255,
                Corner4 = 0,
                Corner5 = 255,
                Corner6 = 255,
                Corner7 = 255,
                Corner8 = 255
            };

            int  edgeIndex = 0b1000_0000_1100;
            byte isolevel  = 127;

            VertexList expected = new VertexList();

            expected[2]  = new float3(0.5f, 0f, 1f);
            expected[3]  = new float3(0f, 0f, 0.5f);
            expected[11] = new float3(0f, 0.5f, 1f);

            // Act
            IEnumerable <float3> actual = MarchingCubesFunctions.GenerateVertexList(densities, new int3(0, 0, 0), edgeIndex, isolevel);

            // Assert
            for (int i = 0; i < 12; i++)
            {
                var actualPosition = actual.ElementAt(i);
                Assert.AreEqual(0, math.distance(expected[i], actualPosition), 0.011f, $"Expected: {expected[i]}, Actual: {actualPosition}");
            }
        }
Esempio n. 3
0
        public void GenerateVertexList_Test3()
        {
            // Arrange
            VoxelCorners <float> densities = new VoxelCorners <float>()
            {
                Corner1 = 0.55f,
                Corner2 = 0.1f,
                Corner3 = 0.745f,
                Corner4 = 0.35f,
                Corner5 = 0.755f,
                Corner6 = 0.8f,
                Corner7 = 1f,
                Corner8 = 0.9f
            };
            VoxelCorners <int3> corners = new VoxelCorners <int3>()
            {
                Corner1 = new int3(-56, -1, 9),
                Corner2 = new int3(-57, -1, 9),
                Corner3 = new int3(-57, -1, 10),
                Corner4 = new int3(-56, -1, 10),
                Corner5 = new int3(-56, 0, 9),
                Corner6 = new int3(-57, 0, 9),
                Corner7 = new int3(-57, 0, 10),
                Corner8 = new int3(-56, 0, 10)
            };

            float isolevel  = 0.75f;
            int   edgeIndex = 0b1111_0000_0000;

            VertexList expected = new VertexList();

            expected[8]  = new float3(-56f, -0.02439022f, 9f);
            expected[9]  = new float3(-57f, -0.07142866f, 9f);
            expected[10] = new float3(-57f, -0.9803922f, 10f);
            expected[11] = new float3(-56f, -0.272727272727f, 10f);

            // Act
            VertexList actual = MarchingCubesFunctions.GenerateVertexList(densities, corners, edgeIndex, isolevel);

            // Assert
            for (int i = 0; i < 12; i++)
            {
                Assert.AreEqual(0, math.distance(expected[i], actual[i]), 0.0001f);
            }
        }
Esempio n. 4
0
        public void GenerateVertexList_Test2()
        {
            // Arrange
            VoxelCorners <float> densities = new VoxelCorners <float>()
            {
                Corner1 = 1f,
                Corner2 = 0f,
                Corner3 = 1f,
                Corner4 = 1f,
                Corner5 = 1f,
                Corner6 = 1f,
                Corner7 = 0f,
                Corner8 = 0f
            };
            VoxelCorners <int3> corners = new VoxelCorners <int3>()
            {
                Corner1 = new int3(6, -13, 100),
                Corner2 = new int3(7, -13, 100),
                Corner3 = new int3(7, -13, 101),
                Corner4 = new int3(6, -13, 101),
                Corner5 = new int3(6, -12, 100),
                Corner6 = new int3(7, -12, 100),
                Corner7 = new int3(7, -12, 101),
                Corner8 = new int3(6, -12, 101)
            };

            float isolevel  = 0.75f;
            int   edgeIndex = 0b1110_1010_0011;

            VertexList expected = new VertexList();

            expected[0]  = new float3(6.25f, -13f, 100f);
            expected[1]  = new float3(7f, -13f, 100.75f);
            expected[5]  = new float3(7f, -12f, 100.25f);
            expected[7]  = new float3(6f, -12f, 100.25f);
            expected[9]  = new float3(7f, -12.25f, 100f);
            expected[10] = new float3(7f, -12.75f, 101f);
            expected[11] = new float3(6f, -12.75f, 101f);

            // Act
            VertexList actual = MarchingCubesFunctions.GenerateVertexList(densities, corners, edgeIndex, isolevel);

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void CalculateCubeIndex_Test(byte c1, byte c2, byte c3, byte c4, byte c5, byte c6, byte c7, byte c8, byte isolevel, byte expectedCubeIndex)
        {
            VoxelCorners <byte> densities = new VoxelCorners <byte>
            {
                Corner1 = c1,
                Corner2 = c2,
                Corner3 = c3,
                Corner4 = c4,
                Corner5 = c5,
                Corner6 = c6,
                Corner7 = c7,
                Corner8 = c8
            };

            byte cubeIndex = MarchingCubesFunctions.CalculateCubeIndex(densities, isolevel);

            Assert.AreEqual(expectedCubeIndex, cubeIndex);
        }
Esempio n. 6
0
        public void CalculateCubeIndex_Test(float c1, float c2, float c3, float c4, float c5, float c6, float c7, float c8, float isolevel, int expectedCubeIndex)
        {
            VoxelCorners <float> densities = new VoxelCorners <float>()
            {
                Corner1 = c1,
                Corner2 = c2,
                Corner3 = c3,
                Corner4 = c4,
                Corner5 = c5,
                Corner6 = c6,
                Corner7 = c7,
                Corner8 = c8
            };

            int cubeIndex = MarchingCubesFunctions.CalculateCubeIndex(densities, isolevel);

            Assert.AreEqual(expectedCubeIndex, cubeIndex);
        }
Esempio n. 7
0
        public void GetCorners_Test(int x, int y, int z)
        {
            int3 pos = new int3(x, y, z);

            VoxelCorners <int3> corners = MarchingCubesFunctions.GetCorners(pos);

            VoxelCorners <int3> expected = new VoxelCorners <int3>()
            {
                Corner1 = new int3(x, y, z),
                Corner2 = new int3(x + 1, y, z),
                Corner3 = new int3(x + 1, y, z + 1),
                Corner4 = new int3(x, y, z + 1),

                Corner5 = new int3(x, y + 1, z),
                Corner6 = new int3(x + 1, y + 1, z),
                Corner7 = new int3(x + 1, y + 1, z + 1),
                Corner8 = new int3(x, y + 1, z + 1)
            };

            Assert.AreEqual(expected, corners);
        }
Esempio n. 8
0
        public void GenerateVertexList_Test1()
        {
            // Arrange
            VoxelCorners <float> densities = new VoxelCorners <float>()
            {
                Corner1 = 1f,
                Corner2 = 1f,
                Corner3 = 1f,
                Corner4 = 0f,
                Corner5 = 1f,
                Corner6 = 1f,
                Corner7 = 1f,
                Corner8 = 1f
            };
            VoxelCorners <int3> corners = new VoxelCorners <int3>()
            {
                Corner1 = new int3(0, 0, 0),
                Corner2 = new int3(1, 0, 0),
                Corner3 = new int3(1, 0, 1),
                Corner4 = new int3(0, 0, 1),
                Corner5 = new int3(0, 1, 0),
                Corner6 = new int3(1, 1, 0),
                Corner7 = new int3(1, 1, 1),
                Corner8 = new int3(0, 1, 1)
            };
            int        edgeIndex = 0b1000_0000_1100;
            float      isolevel  = 0.5f;
            VertexList expected  = new VertexList();

            expected[2]  = new float3(0.5f, 0f, 1f);
            expected[3]  = new float3(0f, 0f, 0.5f);
            expected[11] = new float3(0f, 0.5f, 1f);

            // Act
            VertexList actual = MarchingCubesFunctions.GenerateVertexList(densities, corners, edgeIndex, isolevel);

            // Assert
            Assert.AreEqual(expected, actual);
        }
        public void GenerateVertexList_Test2()
        {
            // Arrange
            VoxelCorners <byte> densities = new VoxelCorners <byte>
            {
                Corner1 = 255,
                Corner2 = 0,
                Corner3 = 255,
                Corner4 = 255,
                Corner5 = 255,
                Corner6 = 255,
                Corner7 = 0,
                Corner8 = 0
            };

            byte isolevel  = 191;
            int  edgeIndex = 0b1110_1010_0011;

            VertexList expected = new VertexList();

            expected[0]  = new float3(6.25f, -13f, 100f);
            expected[1]  = new float3(7f, -13f, 100.75f);
            expected[5]  = new float3(7f, -12f, 100.25f);
            expected[7]  = new float3(6f, -12f, 100.25f);
            expected[9]  = new float3(7f, -12.25f, 100f);
            expected[10] = new float3(7f, -12.75f, 101f);
            expected[11] = new float3(6f, -12.75f, 101f);

            // Act
            IEnumerable <float3> actual = MarchingCubesFunctions.GenerateVertexList(densities, new int3(6, -13, 100), edgeIndex, isolevel);

            // Assert
            for (int i = 0; i < 12; i++)
            {
                var actualPosition = actual.ElementAt(i);
                Assert.AreEqual(0, math.distance(expected[i], actualPosition), 0.011f, $"Expected: {expected[i]}, Actual: {actualPosition}");
            }
        }
        public void VertexInterpolate_Test(float3 a, float3 b, float densityA, float densityB, float isolevel, float3 expectedPoint)
        {
            float3 actualPoint = MarchingCubesFunctions.VertexInterpolate(a, b, densityA, densityB, isolevel);

            Assert.AreEqual(0, math.distance(expectedPoint, actualPoint), 0.00001f, $"Expected: {expectedPoint}, but was: {actualPoint}");
        }