OpenGL“绘画”程序

时间:2012-01-26 16:53:47

标签: c++ opengl glut paint

我正在开发一个项目,用于模拟Microsoft绘制中的许多功能。为了实现这一点,我使用了glutMotionFunc来控制在鼠标拖动时绘制给定形状的画笔。它会改变颜色,旋转等...我希望每次按'b'时都能循环画笔描边形状,但我无法在情况'b'内迭代以跟踪它被按下的次数。

我也不确定即使这有效,我的mouseMove函数也会识别出更改是画笔描边。

void keyboard ( unsigned char key, int x, int y )
{
    Paint_begin newPaint;
    int bPressed = 0;

    switch ( key )
    {   

        case 'b':
            bPressed=bPressed+1;
            newPaint.readyPaint(true);
            printf("bPressed:  %d\n", bPressed);
            newPaint.setShape(bPressed);
            break;

        //... extra code unrelated to my problem

    }
    glutPostRedisplay ( );
}

和mouseMove函数(运动函数):

void mouseMove ( int x, int y )
{
    Paint_begin paintNew;

    if(paintNew.shape==0){
        glRecti(x,y, x+paintNew.sizeDraw, y+paintNew.sizeDraw);
    }
    glFlush();

    if(paintNew.shape==1){
        glBegin(GL_TRIANGLES);
            glVertex2f(x, y+paintNew.sizeDraw);
            glVertex2f(x+paintNew.sizeDraw, y);
            glVertex2f(x, y);
        glEnd();
    }
    //glutPostRedisplay ( );
}

和Paint_begin类

class Paint_begin{

    public:
        static int sizeDraw, readyP, shape;

        void readyPaint(int paint){
            sizeDraw = 1;
            readyP = paint;
            shape = 0;
        }

        void setShape(int shape){
            shape = shape;
        }

        int getShape(){
            return shape;
        }

};

矩形工作正常,但我担心这只是因为形状变量初始化为0.跟踪“bPressed”的printf语句产生1,1,1,无论实际按下多少次。

1 个答案:

答案 0 :(得分:1)

如果您想跟踪按下“b”按钮的次数,您有两种可能:

void keyboard ( unsigned char key, int x, int y )
{
    static int bPressed = 0;
    //...
}

这样变量只初始化一次,然后每次调用函数时它都会存储前一个值。

另一种方法是将bPressed声明为全局变量,以便在调用方法时不会初始化其值。