有人可以解释使用给定3个顶点的DDA扫描线绘制三角形的逻辑吗?

时间:2014-02-19 02:21:16

标签: java graphics

说我有3个顶点:(20,20),(10,60),(50,60)

我如何绘制三角形?

我首先想到的是你需要连接顶点以获得三角形的边缘。这可以通过获得斜率来完成?然后你找到最左边的顶点,然后开始在y中递增并沿x设置像素直到你到达右边缘?

伪代码非常有用,但我也无法理解基本思想。

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。其中一种更简单的方法称为半空间方法,包括在三角形周围绘制一个边界矩形,然后遍历矩形的所有像素。如果像素在三角形内部,则为像素着色。

示例:

//Initialize these however you want to
int x1;
int x2;
int x3;
int y1;
int y2;
int y3;

//Bounding rectangle
int minX = min(x1, x2, x3)
int maxX = max(x1, x2, x3)
int minY = min(y1, y2, y3)
int maxY = max(y1, y2, y3)

for(int x = minX; x <= maxX; x++)
{
    for(int y = minY; y <= maxY; y++)
    {
        //If point in triangle
        if((x1 - x2) * (y - y1) - (y1 - y2) * (x - x1) > 0 &&
           (x2 - x3) * (y - y2) - (y2 - y3) * (x - x2) > 0 &&
           (x3 - x1) * (y - y3) - (y3 - y1) * (x - x3) > 0)
        {
            //Color pixel
        }
    }
}

最小和最大方法必须由您实现,如果您不喜欢上面显示的那个,您可以使用您喜欢的任何方法来确定某个点是否在三角形内。