扫描线填充如何工作

how scan line fill work

在此代码中:

Scan-line fill OpenGL/GLUT algorithm in C++

就这一部分: 它是如何工作的 谁能给我解释一下那是什么?

    void edgedetect(float x1,float y1,float x2,float y2,int *le,int *re)
{
    float temp,x,mx;
    int i;

    if(y1>y2)
    {
        temp=x1,x1=x2,x2=temp;
        temp=y1,y1=y2,y2=temp;
    }

    if(y1==y2)
        mx=x2-x1;
    else
        mx=(x2-x1)/(y2-y1);

    x=x1;

    for(i=int(y1);i<=(int)y2;i++)
    {
        if(x<(float)le[i]) le[i]=(int)x;
        if(x>(float)re[i]) re[i]=(int)x;
        x+=mx;
    }
}

它正在计算 scan-lines 的左右边缘(x 坐标)。 scan-line 的 Y 坐标隐式定义为 le&re 的数组索引。因此,例如,第 i 个 scan-line 被定义为从点 (le[i], i) 到 (re[i], i).

的线

您可以将其想象成从底部向上水平扫描场景。并保持 scan-line 第一次撞击物体的位置(从左侧进入物体)和 scan-line 第二次撞击物体的位置(从右侧离开物体)的 x 坐标。