为什么我的绘图功能不好用?

时间:2016-01-18 23:34:46

标签: c++ opengl

我是开放式GL和我的代码的初学者,当状态是3代码工作正常但当状态为1时,它不能绘制线。我想用一条线连接两个点。 请帮助我如何修复我的if(status==1)语句以画一条线。 这是我的代码:

    void myMouse(int button, int state, int x, int y)
    {
        if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
        {
            if (((x>=30 && x<=70) && ((wh-y)>=400 && (wh-y)<=440)))
                status=1;//draw line
            else if((x>=30 && x<=70) && ((wh-y)>=280 && (wh-y)<=320))
                status=2;
            else if((x>=30 && x<=70) && ((wh-y)>=520 && (wh-y)<=560))
                status=3;//clear page
            else if((x>=30 && x<=70) && ((wh-y)>=160 && (wh-y)<=200))
                status=4;
            else if((x>=30 && x<=70) && ((wh-y)>=40 && (wh-y)<=80))
                status=5;
            else drawPoint(x,y);
        }
    }
void drawPoint(int x,int y)
{
        if(status==1)
        {
            glBegin(GL_LINES);
            glVertex2i(x,y);
            //glVertex2i(x,y);
            glEnd();
            glFlush();
        }

        if(status==3){
            glClear(GL_COLOR_BUFFER_BIT);
            glFlush();
        }

        else{
        y=wh-y;
        glBegin(GL_POINTS);
        glVertex2i(x,y);
        glEnd();
        glFlush();}
}

2 个答案:

答案 0 :(得分:1)

您还可以检查函数myMouse()中的状态条件。然后你可以获得新的点并将它们存储在二维数组中。 如果将x和y存储在数组中,则可以访问先前的点,然后可以绘制一条线。

if(status==1)
        {
            glBegin(GL_LINES);
            glVertex2i(arrx[i],arry[j]);
            glVertex2i(arrx[I-1],arry[j-1]);
            glEnd();
            glFlush();
        }

答案 1 :(得分:0)

OpenGL中的默认可见范围是每个轴上的[-1到1]。看起来像是在像素坐标中指定x和y,这要求您使用投影矩阵(很可能是正交矩阵)。代码看起来像这样:

glMatrixMode(GL_PROJECTION);
glOrtho(0, width, height, 0, 0, 1);

此外,你仍然需要该线的第二点(正如Reto Koradi所说)。我不知道这是否有意,但是当状态为1时,else分支也将被执行。