Я должен знать, как я могу сделать VIP-трибуну, появляется, как это находится в бесконечности?? Я знаю, что это - что-то связанное с глубиной, но я не знаю точную вещь отключить или включить??
Нет бесконечности. Скайбокс - это просто текстурированный бокс с нормальным размером 0,0,0 посередине. Вот небольшой урок: текст ссылки
Сначала отключите запись / тестирование глубины (вам не нужно беспокоиться об отключении проверки глубины, если вы сначала рисуете скайбокс и очищаете буфер глубины):
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 ()
, чтобы другие состояния были правильно установлены после того, как вы нарисовали скайбокс (не забудьте выключить такие вещи, как освещение или смешивание, если необходимо).
Вы должны сделать это перед отрисовкой чего-либо, чтобы все записи цветного буфера происходили поверх вашего небесного бокса.
Лучший подход, который я могу придумать, - это нарисовать его на первом проходе (или на слое), а затем очистить только буфер глубины. После этого просто нарисуйте остальную часть сцены в другом проходе. Таким образом, скайбокс всегда останется «позади» сцены. Просто не забудьте использовать одну и ту же камеру для обоих проходов и каким-то образом привязать скайбокс к камере.
Сначала очистите буфер.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Затем сохраните текущую матрицу просмотра модели и загрузите тождество.
glPushMatrix();
glLoadIdentity();
Затем визуализируйте свой скайбокс.
Skybox.render();
Затем очистите буфер глубины и продолжите рендеринг в обычном режиме
glClear(GL_DEPTH_BUFFER_BIT);
OtherStuff.render();
glutSwapBuffers();