Фират всего отмечает, что рисование последовательностями glBegin
/ glEnd
устарело уже несколько лет.Прочитайте о конвейере с фиксированными функциями и посмотрите Спецификация вершин и Шейдер для современного способа рендеринга.
В любом случае,Вы должны установить матрицу перспективной проекции.Но обратите внимание, что такие операции, как gluLookAt
и gluPerspective
, не только определяют матрицу.
Эти операции определяют матрицу и умножают текущую матрицу в стеке матриц нановая матрица.Это означает, что вы должны сначала инициализировать матрицу на матрице с помощью идентичной матрицыЭто можно сделать с помощью glLoadIdentity
.
Используйте gluPerspective
, чтобы установить перспективную проекцию на стек матрицы проекций - glMatrixMode( GL_PROJECTION )
:
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 90.0f, view_width / view_height, 0.1f, 10.0f );
При установкеПосмотрите матрицу, тогда вам придется изменить точку зрения и посмотреть в направлении «коридора».Поскольку вы смотрите по оси z, вектор вверх должен быть (0, 1, 0):
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
float lookAtX = 0, lookAtY = 0, lookAtZ = 0, posX = 0, posY = 0, posZ = -5;
gluLookAt( posX, posY, posZ, lookAtX, lookAtY, lookAtZ, 0, 1, 0 );
Наконец, ваши координаты вершины смешаны.Измените его следующим образом:
// Back
glBegin(GL_POLYGON);
glColor3ub(255, 0, 0); // Red
glVertex3f(-2.5, -2.5, 2.5);
glVertex3f(-2.5, 2.5, 2.5);
glVertex3f( 2.5, 2.5, 2.5);
glVertex3f( 2.5, -2.5, 2.5);
glEnd();
// Left
glBegin(GL_POLYGON);
glColor3ub(0, 255, 0); // Green
glVertex3f(-2.5, 2.5, 2.5);
glVertex3f(-2.5, 2.5, -2.5);
glVertex3f(-2.5, -2.5, -2.5);
glVertex3f(-2.5, -2.5, 2.5);
glEnd();
// Right
glBegin(GL_POLYGON);
glColor3ub(0, 0, 255); // Blue
glVertex3f(2.5, 2.5, 2.5);
glVertex3f(2.5, 2.5, -2.5);
glVertex3f(2.5, -2.5, -2.5);
glVertex3f(2.5, -2.5, 2.5);
glEnd();
Предварительный просмотр: