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); }
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 }, }; }
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 }, }; }
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]); } }
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; }