假设我有 3 个顶点:(20, 20), (10, 60), (50, 60)
我将如何绘制三角形?
我在想首先你需要连接顶点以获得三角形的边缘。这将通过获得坡度来完成吗?然后你找到最左边的顶点,然后开始在 y 上递增并沿 x 设置像素,直到你到达右边缘?
伪代码将非常有帮助,但我也难以理解基本思想。
您可以通过多种方式执行此操作。一种更简单的方法称为半空间方法,它涉及围绕三角形绘制一个边界矩形,然后遍历矩形的所有像素。如果像素位于三角形内,请为像素着色。
例:
//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
}
}
}
最小和最大方法必须由您实现,如果您不喜欢上面显示的方法,您可以使用任何您喜欢的方法来确定点是否在三角形中。