Как заставить GLUT перерисовать сцену, прежде чем функция вернется?

У меня есть проект OpenGL, который загружает объектный файл, после того, как объект загружен, я хочу иметь возможность плавно перемещать его с помощью клавиатуры, поэтому я написал этот блок кода, чтобы сделать работу:

while (remains) {
    if (x_remains) {
        refPosition[0] += speed.x;
        if (refPosition[0] > nextPos[0]) {
            x_remains = false;
        }
    }
    if (y_remains) {
        refPosition[1] += speed.y;
        if (refPosition[1] > nextPos[1]) {
            y_remains = false;
        }
    }
    if (z_remains) {
        refPosition[2] += speed.z;
        if (refPosition[2] >= nextPos[2]) {
            z_remains = false;
        }
    }

    remains = x_remains || y_remains || z_remains;        
    glutPostRedisplay();
}

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

1 ответ

Вы не потеряете производительность и не увидите резкий рендеринг, пройдя glutPostRedisplay вместо рисования напрямую. (Или, если каждая микросекунда действительно так ценна, какого черта вы используете GLUT для начала?)

В некоторых системах вы не можете рисовать вне функции отображения, так как контекст GL не будет действительным.

Это не уникально и для GLUT. Все современные графические / графические наборы инструментов, с которыми я знаком, также требуют, чтобы у вас была назначенная функция отображения, которая вызывается обработчиком события, будь то сообщения WM_PAINT, NSView drawRect: или что-то еще.

Если ваша программа не обновляется гладко, это будет по какой-то другой причине.

Другие вопросы по тегам