Пример #1
0
 void createIndices()
 {
     for (int x = 0; x < w - 1; x++)
     {
         for (int z = 0; z < h - 1; z++)
         {
             int upperLeft        = (z * w + x);
             int upperRight       = (upperLeft + 1);
             int lowerLeft        = (upperLeft + w);
             int lowerRight       = (lowerLeft + 1);
             FlatMeshTriangle fmt = new FlatMeshTriangle(upperLeft, upperRight, lowerLeft, m, Name + x + "" + z);
             box = BBox.Join(box, fmt.GetBoundingBox());
             m.AddObject(fmt);
             FlatMeshTriangle fmt2 = new FlatMeshTriangle(lowerLeft, upperRight, lowerRight, m, Name + x + "" + z + "2");
             box = BBox.Join(box, fmt2.GetBoundingBox());
             m.AddObject(fmt2);
         }
     }
 }
Пример #2
0
 void parseFaces()
 {
     for (int i = 0; i < lines.Length; i++)
     {
         if (lines[i][0] == 'f')
         {
             string[] w = lines[i].Replace("f ", "").Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
             for (int j = 0; j < w.Length - 2; j++)
             {
                 if (hasNormals)
                 {
                     SmoothMeshTriangle fmt = new SmoothMeshTriangle(int.Parse(w[j]) - 1, int.Parse(w[j + 1]) - 1, int.Parse(w[j + 2]) - 1, ret, i + "" + j + "smsh" + "Mesh" + ret.Name);
                     ret.AddObject(fmt);
                 }
                 else
                 {
                     FlatMeshTriangle fmt = new FlatMeshTriangle(int.Parse(w[j]) - 1, int.Parse(w[j + 1]) - 1, int.Parse(w[j + 2]) - 1, ret, i + "" + j + "fmsh" + "Mesh" + ret.Name);
                     fmt.ComputeNormal(false);
                     ret.AddObject(fmt);
                 }
             }
         }
     }
 }
Пример #3
0
        public override void ParseFaces(Mesh parent, bool smooth)
        {
            int pastLastIndex = indexOfFaces + countFaces;
            int[] indexs = new int[5];
            MeshTriangle triangle;

            for (int i = indexOfFaces; i < pastLastIndex; i++)
            {
                string[] tokens = fileLines[i].Split(' ');
                int numVerts = Convert.ToInt32(tokens[0]);

                switch (numVerts)
                {
                    case 3: //Face is a triangle
                        for (int j = 1; j < 4; j++)
                        {
                            indexs[j] = Convert.ToInt32(tokens[j]);
                        }
                        //Create new triangle
                        if (smooth)
                            triangle = new SmoothMeshTriangle(parent);
                        else
                            triangle = new FlatMeshTriangle(parent);
                        triangle.SetVertexIndices(indexs[1], indexs[2], indexs[3]);
                        //Update list of faces for given vertexs using current index
                        parent.vertexFaces[indexs[1]].Add(parent.countTriangles);
                        parent.vertexFaces[indexs[2]].Add(parent.countTriangles);
                        parent.vertexFaces[indexs[3]].Add(parent.countTriangles);
                        parent.countTriangles++;
                        parent.AddObject(triangle);
                        break;

                    case 4: //Face is a quad
                        for (int j = 1; j < 5; j++)
                        {
                            indexs[j] = Convert.ToInt32(tokens[j]);
                        }
                        //Create new triangle
                        if (smooth)
                            triangle = new SmoothMeshTriangle(parent);
                        else
                            triangle = new FlatMeshTriangle(parent);
                        triangle.SetVertexIndices(indexs[1], indexs[2], indexs[3]);
                        //Update list of faces for given vertexs using current index
                        parent.vertexFaces[indexs[1]].Add(parent.countTriangles);
                        parent.vertexFaces[indexs[2]].Add(parent.countTriangles);
                        parent.vertexFaces[indexs[3]].Add(parent.countTriangles);
                        parent.countTriangles++;
                        parent.AddObject(triangle);
                        //Create new triangle
                        if (smooth)
                            triangle = new SmoothMeshTriangle(parent);
                        else
                            triangle = new FlatMeshTriangle(parent);
                        triangle.SetVertexIndices(indexs[3], indexs[4], indexs[1]);
                        //Update list of faces for given vertexs using current index
                        parent.vertexFaces[indexs[3]].Add(parent.countTriangles);
                        parent.vertexFaces[indexs[4]].Add(parent.countTriangles);
                        parent.vertexFaces[indexs[1]].Add(parent.countTriangles);
                        parent.countTriangles++;
                        parent.AddObject(triangle);
                        break;

                    default: //What the f**k kind of input are you feeding this poor parser?
                        throw new System.FormatException("Invalid token at line " + (i + 1) +
                            ": " + numVerts + "is not a valid number of vertices for a face.");
                }
            }
            CalculateNormals(parent);
        }