Generic.cPipelineElement3X.ElementProcessor3X rasterizerProcessor = delegate(Vector3[] element) { Vector3 v1, v2, v3; if ((element[0].Y < element[1].Y) && (element[0].Y < element[2].Y)) { v1 = element[0]; if (element[1].Y < element[2].Y) { v2 = element[1]; v3 = element[2]; } else { v2 = element[2]; v3 = element[1]; } } else if (element[1].Y < element[2].Y) { v1 = element[1]; if (element[0].Y < element[2].Y) { v2 = element[0]; v3 = element[2]; } else { v2 = element[2]; v3 = element[0]; } } else { v1 = element[2]; if (element[1].Y < element[0].Y) { v2 = element[1]; v3 = element[0]; } else { v2 = element[0]; v3 = element[1]; } } v1 = v1 * 200 + new Vector3(100, 100, 0.0f); v2 = v2 * 200 + new Vector3(100, 100, 0.0f); v3 = v3 * 200 + new Vector3(100, 100, 0.0f); int currY = (int)Math.Round(v1.Y); int goalY = (int)Math.Round(v2.Y); float factor1 = (v2.X - v1.X) / (v2.Y - v1.Y); float factor2 = (v3.X - v1.X) / (v3.Y - v1.Y); while (currY < goalY) { int start = (int)(v1.X + ((float)currY - v1.Y) * factor1); //Rasterizer.Output(new Vector3(start, currY, 0.0f)); int end = (int)(v1.X + ((float)currY - v1.Y) * factor2); int count = start; if (start < end) while (count++ < end) Rasterizer.Output(new Vector3(count, currY, 0.0f)); else if (end < start) while (count-- > end) Rasterizer.Output(new Vector3(count, currY, 0.0f)); currY++; } Rasterizer.Output(v1); Rasterizer.Output(v2); Rasterizer.Output(v3); };