在实施扫描线算法时,我陷入了中途(或者你可以说一开始)。我遵循奇偶校验,即
for each scanline
edgeCnt = 0;
for each pixel on scanline (l to r)
if (oldpixel->newpixel crosses edge)
edgeCnt ++;
// draw the pixel if edgeCnt odd
if (edgeCnt % 2)
setPixel(pixel);
假设我的三角形有顶点 A(10,10)、B(100, 100) 和 C(200, 30)。现在这个算法的问题是。点 A 无法计数,因为如果计数,则在同一水平线上没有检测到边缘,因此 A 之后的整条线将被着色。现在,如果我排除顶点,则顶点 C 之前的像素会被着色,但由于扫描不会检测到顶点,因此不会检测到 C,它将继续对线条着色,直到检测到下一条较高线条上的边缘。
有没有标准的解决方案?