Во-первых, отключите запись / тестирование глубины (вам не нужно беспокоиться об отключении тестирования глубины, если вы сначала нарисуете скайбокс и очистите буфер глубины):
glDisable(GL_DEPTH_TEST);
glDepthMask(false);
Затем переместите камеру в исходное положение и поверните ее в обратном направлении матрицы вида модели:
// assume we're working with the modelview
glPushMatrix();
// inverseModelView is a 4x4 matrix with no translation and a transposed
// upper 3x3 portion from the regular modelview
glLoadMatrix(&inverseModelView);
Теперь нарисуйте свой скайбокс и включите запись глубины:
DrawSkybox();
glPopMatrix();
glDepthMask(true);
glEnable(GL_DEPTH_TEST);
Возможно, вы захотите использовать glPush/PopAttrib()
, чтобы убедиться, что другие ваши состояния правильно установлены после того, как вы тоже нарисуете скайбокс (обязательно выключите такие вещи, как освещение или смешивание, если необходимо).
Вы должны сделать это перед тем, как что-либо рисовать, чтобы все записи цветного буфера происходили в верхней части вашего скайбокса.