1

在实施扫描线算法时,我陷入了中途(或者你可以说一开始)。我遵循奇偶校验,即

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,它将继续对线条着色,直到检测到下一条较高线条上的边缘。

有没有标准的解决方案?

4

1 回答 1

0

如果顶点的方向发生变化,不要计算它。如果方向相同,数一下。如果这条线是水平的,请忽略它并检查下一个顶点。

于 2012-10-14T02:55:45.320 回答