OpenGL "рисовать" программу - PullRequest
0 голосов
/ 26 января 2012

Я работаю над проектом, который должен имитировать многие функции, видимые в 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;
        }

};

Прямоугольник работает правильно, но я боюсь, что это только потому, что переменная формы инициализирована равной 0. Отслеживание оператора printf для "bPressed" дает 1,1, 1, независимо от того, сколько раз оно действительно было нажато.

1 Ответ

1 голос
/ 26 января 2012

Если вы хотите отслеживать, сколько раз вы нажали кнопку «b», у вас есть две возможности:

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

Так что переменная инициализируется только один раз, а затем она будет сохранять предыдущее значение каждый раз, когда вы вызываете вашу функцию.

Альтернативой является объявление bPressed в качестве глобальной переменной, чтобы ее значение не инициализировалось при вызове метода.

...