示例#1
0
    public static List <Vector3[]> GetVertices(Voxel voxel, int[,] trianglesEdges, float borderValue)
    {
        List <Vector3[]> allVertices = new List <Vector3[]>();

        for (int i = 0; i < trianglesEdges.GetLength(0); i++)
        {
            if (trianglesEdges[i, 0] != -1)
            {
                Vector3[] vertices = new Vector3[3];

                for (int j = 0; j < trianglesEdges.GetLength(1); j++)
                {
                    int[,] points = VertexesCaseProvider.GetVertexesIndexInArrayByEdge(trianglesEdges[i, j]);
                    Vector3 firstPoint  = voxel.GetRange(points[0, 0], points[0, 1], points[0, 2]);
                    Vector3 secondPoint = voxel.GetRange(points[1, 0], points[1, 1], points[1, 2]);
                    float   valueToInterpolate;

                    valueToInterpolate = (borderValue - voxel.Density[points[0, 0], points[0, 1], points[0, 2]]) /
                                         (voxel.Density[points[1, 0], points[1, 1], points[1, 2]] - voxel.Density[points[0, 0], points[0, 1], points[0, 2]]);

                    vertices[j] = Vector3.Lerp(firstPoint, secondPoint, valueToInterpolate);
                }

                allVertices.Add(vertices);
            }
        }

        return(allVertices);
    }
 public void GetVerticesEdgesIndexes1()
 {
     Assert.AreEqual(VertexesCaseProvider.GetVertexesIndexInArrayByEdge(0)[0, 0], 0);
 }
 public void GetVerticesEdgesIndexes3()
 {
     Assert.AreEqual(VertexesCaseProvider.GetVertexesIndexInArrayByEdge(1)[1, 1], 1);
 }