如何扫描线填充工作

时间:2015-12-30 11:37:26

标签: c++ opengl glut

在此代码中:

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;
    }
}

1 个答案:

答案 0 :(得分:1)

计算扫描线的左右边缘(x坐标)。扫描线的Y坐标隐含地定义为le&amp; re的数组索引。因此,例如,第i个扫描线被定义为从点(le [i],i)到(re [i],i)的线。

你可以把它想象成你从底部水平扫描场景。并保持扫描线第一次击中物体的位置的x坐标(通过左侧的物体进入)以及扫描线第二次击中物体的位置(将物体从右侧击中)。