Как заставить 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: или что-то еще.
Если ваша программа не обновляется гладко, это будет по какой-то другой причине.