Member 13184387 Ответов: 1

Как заставить GL_QUADS двигаться вбок?


Здравствуйте, я новичок в opengl и не знаю, как использовать gltranslate/glrotate, чтобы позволить gl_quads двигаться в сторону, любая помощь? ниже приведены мои вершины для gl_quads:

void display(){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glPushMatrix();
    glTranslatef(0.3,0,0);
    //glTranslatef(0.7,0,0);
    //glRotatef(45.0,0.0,1.0,0.0);

    glBegin(GL_QUADS);
        glColor3f(1.0f, 0.5f, 0.0f);     // Orange
        glVertex2f(0,0);

        glColor3f(1.0f, 0.0f, 0.0f);     // Red
        glVertex2f(0.4,0);

        glColor3f(1.0f, 1.0f, 0.0f);     // Yellow
        glVertex2f(0.4,0.4);

        glColor3f(0.0f, 0.0f, 1.0f);     // Blue
        glVertex2f(0,0.4);


    glEnd();
    glPopMatrix();
    glutSwapBuffers();

}


Что я уже пробовал:

я попробовал переместить положение и угол, но я должен увидеть "живой" режим его перемещения в сторону

1 Ответов

Рейтинг:
1

Rick York

Стандартный способ сделать это-иметь некоторое изменение параметров с течением времени. Поскольку вы хотите, чтобы он двигался боком, то отрегулируйте перевод в направлении X. Для его анимации обычно люди устанавливают таймер и увеличивают перевод на каждом ТИКе. В мире windows это означает обработку сообщения WM_TIMER. Вот пример процедуры обработки таймера для окна MFC :

void MyWindow::OnTimer( UINT_PTR eventId )
{
    if( eventId == MyTimerId )
    {
        m_TranslationX += increment;
        Invalidate();     // cause the window to be redrawn
    }
    __super::OnTimer( eventId );
}

// the translation call in your display function will become :

glTranslatef( m_Translation, 0, 0 );
Если вы хотите, вы можете увеличить m_Translation до тех пор, пока он не достигнет определенного значения, а затем уменьшить его на некоторое время, и это заставит квадроциклы двигаться вправо, а затем влево.