Копланарные поверхности OpenGL - PullRequest
1 голос
/ 21 ноября 2011

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

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

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

PS: Я попытался нарисовать лежащий в основе многоугольник на заднем буфере и квадрат на передней панели, но glutSwapBuffers() создал хаос.

1 Ответ

4 голосов
/ 21 ноября 2011

Как и многие другие, вы, кажется, ошибочно принимаете OpenGL за API управления сценой, что совершенно неправильно.OpenGL ничего не делает, кроме как что-то рисует на экране.После отрисовки OpenGL полностью забывает о многоугольнике.Итак, это означает, что вы должны рисовать все, что хотите, чтобы они отображались в каждом кадре (часто после очистки буфера кадров).

Итак, очистите буфер кадров, нарисуйте полигон и нарисуйте квадрат.Как только позиция квадрата (или что-то еще) изменится, снова очистите буфер кадров, нарисуйте многоугольник и нарисуйте свой квадрат.Вот как это работает.

И, конечно же, вы не должны ничего рисовать в рутине мыши, не говоря уже о вызове glClear, что приводит к тому типу мусора, который вы испытываете.Вместо этого обновите вашу сцену и попросите окно перерисовать себя, что, в свою очередь, рисует всю сцену в методе отображения:

mouseFunc()
{
    updateSquare();
    glutPostRedisplay();
}


displayFunc()
{
    glClear(...);
    drawPolygon();
    drawSquare();
    glutSwapBuffers();
}

И, конечно, ни в коем случае не рисуйте в передний буфер при использовании двойногобуферизация.

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