我正在开发一个项目,该项目可以模拟Microsoft Paint中看到的许多功能。为此,我使用了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;
        }

};


矩形可以正常工作,但我担心这仅仅是因为shape变量已初始化为0。跟踪printf语句中的“ bPressed”会产生1,1,1,无论它实际被按下了多少次。

最佳答案

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

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


这样,该变量仅初始化一次,然后在每次调用函数时将存储先前的值。

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

关于c++ - OpenGL“画图”程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9021932/

10-12 20:39