Ejemplo n.º 1
0
 public static void FillTriangle(Graphics g, Pen edgePen, Brush fillBrush, Triangle triangle)
 {
     if (triangle.A == triangle.B && triangle.B == triangle.C)
     {
         Point endPoint = new Point(triangle.Owner.Points[triangle.A].X + 1, triangle.Owner.Points[triangle.A].Y + 1);
         g.DrawLine(edgePen, triangle.Owner.Points[triangle.A], endPoint);
     }
     else
     {
         Point[] points = new Point[]
         {
             triangle.Owner.Points[triangle.A],
             triangle.Owner.Points[triangle.B],
             triangle.Owner.Points[triangle.C]
         };
         g.FillPolygon(fillBrush, points);
     }
     DrawTriangle(g, edgePen, triangle);
 }
Ejemplo n.º 2
0
        public Box(float width, float height, float depth)
        {
            Vertices = new Vertex[]
            {
                new Vertex { X = -width/2, Y = height/2, Z = -depth/2 },
                new Vertex { X = width/2, Y = height/2, Z = -depth/2 },
                new Vertex { X = width/2, Y = -height/2, Z = -depth/2 },
                new Vertex { X = -width/2, Y = -height/2, Z = -depth/2 },
                new Vertex { X = -width/2, Y = height/2, Z = depth/2 },
                new Vertex { X = width/2, Y = height/2, Z = depth/2 },
                new Vertex { X = width/2, Y = -height/2, Z = depth/2 },
                new Vertex { X = -width/2, Y = -height/2, Z = depth/2 },
            };

            Triangles = new Triangle[]
            {
                // Front
                new Triangle { A = 0, B = 1, C = 2, EdgeMask = EdgeMask.ABC },
                new Triangle { A = 2, B = 3, C = 0, EdgeMask = EdgeMask.ABC },

                // Back
                new Triangle { A = 5, B = 4, C = 7, EdgeMask = EdgeMask.ABC },
                new Triangle { A = 7, B = 6, C = 5, EdgeMask = EdgeMask.ABC },

                // Top
                new Triangle { A = 0, B = 4, C = 5, EdgeMask = EdgeMask.ABC },
                new Triangle { A = 5, B = 1, C = 0, EdgeMask = EdgeMask.ABC },

                // Right side
                new Triangle { A = 1, B = 5, C = 6, EdgeMask = EdgeMask.ABC },
                new Triangle { A = 6, B = 2, C = 1, EdgeMask = EdgeMask.ABC },

                // Bottom
                new Triangle { A = 3, B = 2, C = 6, EdgeMask = EdgeMask.ABC },
                new Triangle { A = 6, B = 7, C = 3, EdgeMask = EdgeMask.ABC },

                // Right
                new Triangle { A = 4, B = 0, C = 3, EdgeMask = EdgeMask.ABC },
                new Triangle { A = 3, B = 7, C = 4, EdgeMask = EdgeMask.ABC },
            };
        }
Ejemplo n.º 3
0
        public ShipModel(float width, float height, float depth)
        {
            Vertices = new Vertex[]
            {
                new Vertex { X = -width/2, Y = -height/2, Z = depth/2 },
                new Vertex { X = 0, Y = height/2, Z = depth/2 },
                new Vertex { X = width/2, Y = -height/2, Z = depth/2 },
                new Vertex { X = 0, Y = -height/2, Z = -depth/2 },
            };

            Triangles = new Triangle[]
            {
                // Back
                new Triangle { A = 0, B = 1, C = 2, EdgeMask = EdgeMask.ABCA },
                // Top right
                new Triangle { A = 0, B = 3, C = 1, EdgeMask = EdgeMask.ABCA },
                // Top left
                new Triangle { A = 3, B = 2, C = 1, EdgeMask = EdgeMask.ABCA },
                // Bottom
                new Triangle { A = 0, B = 2, C = 3, EdgeMask = EdgeMask.ABCA },
            };
        }
Ejemplo n.º 4
0
        public static void DrawTriangle(Graphics g, Pen pen, Triangle triangle)
        {
            if (triangle.A == triangle.B && triangle.B == triangle.C)
            {
                Point endPoint = new Point(triangle.Owner.Points[triangle.A].X + 1, triangle.Owner.Points[triangle.A].Y + 1);
                g.DrawLine(pen, triangle.Owner.Points[triangle.A], endPoint);
            }
            else
            {
                if ((triangle.EdgeMask & EdgeMask.AB) != 0)
                    g.DrawLine(pen, triangle.Owner.Points[triangle.A], triangle.Owner.Points[triangle.B]);

                if ((triangle.EdgeMask & EdgeMask.BC) != 0)
                    g.DrawLine(pen, triangle.Owner.Points[triangle.B], triangle.Owner.Points[triangle.C]);

                if ((triangle.EdgeMask & EdgeMask.AC) != 0)
                    g.DrawLine(pen, triangle.Owner.Points[triangle.A], triangle.Owner.Points[triangle.C]);

                if ((triangle.EdgeMask & EdgeMask.CA) != 0)
                    g.DrawLine(pen, triangle.Owner.Points[triangle.C], triangle.Owner.Points[triangle.A]);
            }
        }
Ejemplo n.º 5
0
        private int CompareTriangleDepth(Triangle a, Triangle b)
        {
            Vertex vertexA = a.Owner.TransformedVertices[a.B];
            Vertex vertexB = b.Owner.TransformedVertices[b.B];

            if (vertexA.Z > vertexB.Z)
                return -1;
            else if (vertexA.Z < vertexB.Z)
                return 1;
            else
                return 0;
        }