Exemple #1
0
        void RenderUnitPart(UnitPart unitpart)
        {
            Gl.glPushMatrix();
            g.Translate(unitpart.Offset);
            switch (unitpart.PrimitiveType)
            {
            case UnitPart.PrimitiveTypeEnum.Triangles:
            {
                Gl.glBegin(Gl.GL_TRIANGLES);
                foreach (Primitive primitive in unitpart.Primitives)
                {
                    Triangle triangle = primitive as Triangle;
                    g.Normal(triangle.Vertices[0].Normal);
                    g.TexCoord(triangle.Vertices[0].TextureCoords);
                    g.Vertex(triangle.Vertices[0].Pos);

                    g.Normal(triangle.Vertices[1].Normal);
                    g.TexCoord(triangle.Vertices[1].TextureCoords);
                    g.Vertex(triangle.Vertices[1].Pos);

                    g.Normal(triangle.Vertices[2].Normal);
                    g.TexCoord(triangle.Vertices[2].TextureCoords);
                    g.Vertex(triangle.Vertices[2].Pos);
                }
                Gl.glEnd();
                break;
            }

            case UnitPart.PrimitiveTypeEnum.Quads:
            {
                Gl.glBegin(Gl.GL_QUADS);
                foreach (Primitive primitive in unitpart.Primitives)
                {
                    Quad quad = primitive as Quad;
                    g.Normal(quad.Vertices[0].Normal);
                    g.TexCoord(quad.Vertices[0].TextureCoords);
                    g.Vertex(quad.Vertices[0].Pos);

                    g.Normal(quad.Vertices[1].Normal);
                    g.TexCoord(quad.Vertices[1].TextureCoords);
                    g.Vertex(quad.Vertices[1].Pos);

                    g.Normal(quad.Vertices[2].Normal);
                    g.TexCoord(quad.Vertices[2].TextureCoords);
                    g.Vertex(quad.Vertices[2].Pos);

                    g.Normal(quad.Vertices[3].Normal);
                    g.TexCoord(quad.Vertices[3].TextureCoords);
                    g.Vertex(quad.Vertices[3].Pos);
                }
                Gl.glEnd();
                break;
            }

            case UnitPart.PrimitiveTypeEnum.TriangleStrips:
            {
                foreach (Primitive primitive in unitpart.Primitives)
                {
                    TriangleStrip trianglestrip = primitive as TriangleStrip;
                    Gl.glBegin(Gl.GL_TRIANGLE_STRIP);
                    foreach (Vertex vertex in trianglestrip.Vertices)
                    {
                        g.Normal(vertex.Normal);
                        g.TexCoord(vertex.TextureCoords);
                        g.Vertex(vertex.Pos);
                    }
                    Gl.glEnd();
                }
                break;
            }
            }

            foreach (UnitPart childunitpart in unitpart.Children)
            {
                RenderUnitPart(childunitpart);
            }
            Gl.glPopMatrix();
        }