Обратите внимание, что рисование с помощью glBegin
/ glEnd
последовательностей и стека конвейерной матрицы с фиксированными функциями устарело с десятилетий.Прочитайте о конвейере с фиксированными функциями и посмотрите Спецификация вершин и Шейдер для современного способа рендеринга.
В любом случае,glTranslatef
не допускается в glBegin
/ glEnd
последовательностях.Сделайте это до glBegin
:
void drawShape(void) {
glTranslatef(squareX, squareY, squareZ);
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(162, 50);
glVertex2f(162, 10);
glVertex2f(220, 10);
glVertex2f(220, 50);
glVertex2f(162, 50);
glEnd();
}
Если вы хотите нарисовать квад в координатах окна, то вы должны использовать ортографическую проекцию (glOrtho
):
void handleResize(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
/*
gluPerspective(45.0, // the camera angle
(double)w / (double)h, // the width-to-height ratio
1.0, // the near z clipping coordinate
200.0); // the far z clipping coordinate
*/
glOrtho( 0.0f, (float)w, 0.0f,(float)h, -1.0f, 1.0f );
}
и вам нужно изменить сумму перевода:
void update(int value) {
if (flag) {
squareY += 1.0f;
if (squareY > 350.0) {
flag = 0;
}
}
if (!flag) {
squareY -= 1.0f;
if (squareY < 0.0) {
flag = 1;
}
}
glutPostRedisplay();
glutTimerFunc(25, update, 0);
}
Предварительный просмотр: