在实现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不会被检测到,它会一直给线着色,直到检测到下一条更高的线的边为止。
有什么标准的解决办法吗?
最佳答案
如果顶点的方向有变化,不要计算如果方向相同,数一数。如果直线是水平的,忽略它并检查下一个顶点。