Example #1
0
        // 平底三角绘制
        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);
            }
        }
Example #2
0
 // 片段上下文的Y左边排序
 private static int compareDc(DrawContext a, DrawContext b) => (a.winPos.y < b.winPos.y ? -1 : 1);
Example #3
0
 public void ComputeDepth(DrawContext dc)
 { // 计算[0.0~1.0]范围的深度
     dc.depth = dc.clipPos.w / Cam.far;
 }