在实现scanline algo时,我陷入了中途(或者说在开始时)。
我遵循奇偶检验,即。,

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不会被检测到,它会一直给线着色,直到检测到下一条更高的线的边为止。
有什么标准的解决办法吗?

最佳答案

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

09-25 21:21