回 帖 发 新 帖 刷新版面

主题:OpenGL画线问题

用OpenGL画一条直线,用Bresenham算法,只能用OpenGL库文件中的glVertex2f();Begink()中用(GL_POINTS),
也即逐点画出。不可用GL_LINES画。

此帖转自:[url]http://www.programfan.com/team/team.asp?team_id=741[/url]

回复列表 (共3个回复)

沙发

用GL做图形学练习太浪费了吧

板凳

是吗?

3 楼

///////////////////////////////////////////////////////////////////
//中点Bresenham算法画直线(0<=k<=1)                               //
//参数说明:x0,y0  起点坐标                                      //  
//          x1,y1  终点坐标                                      // 
//          num    扫描转换时从起点开始输出的点的数目,用于动画  //
/////////////////////////////////////////////////////////////////// 
void BresenhamLine(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num)
{
    glColor3f(1.0f,0.0f,0.0f);

    if(num == 1)
        printf("中点Bresenham算法画直线:各点坐标及判别式的值\n");
    else if(num==0)
        return;

    //画线算法的实现
    GLsizei dx,dy,epsl,k;
    GLfloat x,y,xIncre,yIncre;

    dx = x1-x0;
    dy = y1-y0;
    x = x0;
    y = y0;

    if(abs(dx) > abs(dy)) epsl = abs(dx);
    else epsl = abs(dy);
    xIncre = (float)dx / epsl ;
    yIncre = (float)dy / epsl ;

    for(k = 0; k<=epsl; k++){
        putpixel((int)(x+0.5), (int)(y+0.5));
        if (k>=num-1) {
            printf("x=%f,y=%f,取整后 x=%d,y=%d\n", x, y, (int)(x+0.5),(int)(y+0.5));
            break;
        }
        x += xIncre;
        y += yIncre;

        if(x >= 25 || y >= 25) break;
    }

}

///////////////////////////////////////////////////////////////////
//改进的Bresenham算法画直线(0<=k<=1)                             //
//参数说明:x0,y0  起点坐标                                      //  
//          x1,y1  终点坐标                                      // 
//          num    扫描转换时从起点开始输出的点的数目,用于动画  //
/////////////////////////////////////////////////////////////////// 
void Bresenham2Line(GLsizei x0, GLsizei y0, GLsizei x1, GLsizei y1, GLsizei num)
{
    glColor3f(1.0f,0.0f,0.0f);

    if(num == 1)
        printf("改进的Bresenham算法画直线:各点坐标及判别式的值\n");
    else if(num==0)
        return;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册