コード例 #1
0
ファイル: Primitives.cs プロジェクト: slicedpan/ModelMesh
 public Vertex this[int index]
 {
     get {
         switch (index)
         {
         case 0:
             return p0;
         case 1:
             return p1;
         case 2:
             return p2;
         case 3:
             return p3;
         default:
             throw new ArgumentException("index must be 0 - 3");
         }
     }
     set {
         switch (index)
         {
         case 0:
             p0 = value;
             break;
         case 1:
             p1 = value;
             break;
         case 2:
             p2 = value;
             break;
         case 3:
             p3 = value;
             break;
         }
     }
 }
コード例 #2
0
ファイル: Primitives.cs プロジェクト: slicedpan/ModelMesh
        public static Triangle[] ToTriangles(Quad quad)
        {
            Triangle[] tris = new Triangle[2];

            VertexDeclaration quadDecl = quad.p0.VertexDeclaration;
            tris[0] = new Triangle();
            tris[1] = new Triangle();

            for (int i = 0; i < 3; ++i)
            {
                tris[0][i] = new Vertex(quadDecl);
                tris[1][i] = new Vertex(quadDecl);
            }

            tris[0].p0.FromArray(quad[0].ToArray());
            tris[0].p1.FromArray(quad[1].ToArray());
            tris[0].p2.FromArray(quad[2].ToArray());

            tris[1].p0.FromArray(quad[0].ToArray());
            tris[1].p1.FromArray(quad[2].ToArray());
            tris[1].p2.FromArray(quad[3].ToArray());

            return tris;
        }
コード例 #3
0
ファイル: GeometryParser.cs プロジェクト: slicedpan/ModelMesh
        private void PopulateMesh()
        {
            int offset = 0;

            tris = new Triangle[triCount];
            int triPos = 0;

            for (int i = 0; i < polyVertexCount.Length; ++i)
            {
                IPoly poly;

                if (polyVertexCount[i] == 3)
                    poly = new Triangle();
                else
                    poly = new Quad();

                for (int j = 0; j < polyVertexCount[i]; ++j)
                {
                    float[] datArray = new float[_vertexDeclaration.Stride];
                    int index = 0;

                    foreach (KeyValuePair<string, Semantic> inputSemantic in semantics)
                    {
                        var channel = _vertexDeclaration.GetChannel(inputSemantic.Key);
                        index = indices[(semantics.Count * offset) + inputSemantic.Value.Offset];
                        float[] sourceData = sources[inputSemantic.Value.SourceName].data;
                        int sourceStride = sources[inputSemantic.Value.SourceName].stride;
                        PopulateArray(sourceData, index * sourceStride, datArray, channel.Offset, channel.Stride);
                    }

                    poly[j] = new Vertex(_vertexDeclaration);
                    poly[j].FromArray(datArray);
                    ++offset;
                }
                if (polyVertexCount[i] == 4)
                {
                    Triangle[] quadTris = PrimitiveHelper.ToTriangles(poly as Quad);
                    quadTris.CopyTo(tris, triPos);
                    triPos += 2;
                }
                else
                {
                    tris[triPos] = (Triangle)poly;
                    ++triPos;
                }
            }
        }