Постарайтесь не слишком усложнять вещи для себя.
void GameInstance::Render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// the default matricies set the origin to be at the center of the screen, with
// (-1, -1) being at the bottom-left corner, and
// ( 1, 1) being at the top-right.
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
// render a full-screen quad without writing to the depth buffer
glDisable(GL_DEPTH_TEST);
glBegin(GL_QUADS);
glVertex2i(-1, -1);
glVertex2i( 1, -1);
glVertex2i( 1, 1);
glVertex2i(-1, 1);
glEnd();
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
mSpaceShip->Render();
glFlush();
glutSwapBuffers();
}
При вызове gluOrtho2D
вы устанавливали начало координат в центр экрана, но отображали только четырехугольник внутри верхний правый квадрант (но поскольку вы вносите изменения в GL_MODELVIEW
за пределами Render()
, это всего лишь предположение).
Использование gluOrtho2D
эквивалентно вызову glOrtho
с z -clipping range установлен в [-1 .. 1]
, поэтому я подозреваю, что для вашего вызова glTranslatef
требовалось намного меньшее значение z, например 0.5f
вместо 100.0f
.