Как сделать плавные движения в OpenGL? - PullRequest
3 голосов
/ 11 мая 2010

Так что это как тема для моего другого вопроса OpenGL (не мой вопрос OpenGL ES, а OpenGL для настольной версии). Если у вас есть кто-то, кто нажимает клавишу, чтобы переместить квадрат, как вы делаете движение квадрата естественным и менее скачкообразным, но также с той же скоростью, что и сейчас? Это мой код для функции glutKeyboardFunc ():

void handleKeypress(unsigned char key, int x, int y) 
{
        if (key == 'w')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 1 || i == 7 || i == 10 || i == 4)
                {
                    square[i] = square[i] + 1;
                }
            }
            glutPostRedisplay();
        }
        if (key == 'd')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] + 1;
                }
            }
            glutPostRedisplay();
        }
    if (key == 's')
    {
        for (int i = 0; i < 12; i++)
        {
            if (i == 1 || i == 7 || i == 10 || i == 4)
            {
                square[i] = square[i] - 1;
            }
        }
        glutPostRedisplay();
    }
        if (key == 'a')
        {
            for (int i = 0; i < 12; i++)
            {
                if (i == 0 || i % 3 == 0)
                {
                    square[i] = square[i] - 1;
                }
            }
            glutPostRedisplay();
        }
}

Извините, если это не имеет смысла, я постараюсь перефразировать его лучше, если это не имеет смысла.

1 Ответ

5 голосов
/ 11 мая 2010

Если я правильно понимаю, проблема в том, что вы изменяете положение объекта на событии клавиатуры и запрашиваете отображение после обработки этого события.

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

Это работает лучше, если обработка событий выполняется в отдельном потоке, поэтому обработка событий не блокирует (по крайней мере, для нескольких операций синхронизации) операции рендеринга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...