Как и многие другие, вы, кажется, ошибочно принимаете OpenGL за API управления сценой, что совершенно неправильно.OpenGL ничего не делает, кроме как что-то рисует на экране.После отрисовки OpenGL полностью забывает о многоугольнике.Итак, это означает, что вы должны рисовать все, что хотите, чтобы они отображались в каждом кадре (часто после очистки буфера кадров).
Итак, очистите буфер кадров, нарисуйте полигон и нарисуйте квадрат.Как только позиция квадрата (или что-то еще) изменится, снова очистите буфер кадров, нарисуйте многоугольник и нарисуйте свой квадрат.Вот как это работает.
И, конечно же, вы не должны ничего рисовать в рутине мыши, не говоря уже о вызове glClear
, что приводит к тому типу мусора, который вы испытываете.Вместо этого обновите вашу сцену и попросите окно перерисовать себя, что, в свою очередь, рисует всю сцену в методе отображения:
mouseFunc()
{
updateSquare();
glutPostRedisplay();
}
displayFunc()
{
glClear(...);
drawPolygon();
drawSquare();
glutSwapBuffers();
}
И, конечно, ни в коем случае не рисуйте в передний буфер при использовании двойногобуферизация.