// 平底三角绘制 private static void DrawTriangleFlatBottom(DrawContext left, DrawContext right, DrawContext middle, Renderer renderer) { if (left.winPos.x < right.winPos.x) { // noops } else { var t = left; left = right; right = t; } var dy = (int)(left.winPos.y - (int)middle.winPos.y); for (int i = 0; i < dy; i++) { var t = (float)i / dy; var line_left = Lerp(left, middle, t); var line_right = Lerp(right, middle, t); ScanLine(line_left, line_right, (int)line_left.winPos.y, renderer); } }
// 片段上下文的Y左边排序 private static int compareDc(DrawContext a, DrawContext b) => (a.winPos.y < b.winPos.y ? -1 : 1);
public void ComputeDepth(DrawContext dc) { // 计算[0.0~1.0]范围的深度 dc.depth = dc.clipPos.w / Cam.far; }