OpenGL: создать скайбокс? - PullRequest
       14

OpenGL: создать скайбокс?

5 голосов
/ 25 сентября 2010

Я новичок в OpenGL.Я использую JOGL.

Я хотел бы создать небо для своего мира, которое я могу текстурировать облаками или звездами.Я не уверен, что лучший способ сделать это.Мой первый инстинкт - создать действительно большую сферу с квадратичной ориентацией GLU_INSIDE и текстурировать ее.Есть ли лучший способ?

Ответы [ 3 ]

10 голосов
/ 25 сентября 2010

Скайбокс - довольно хороший способ. Для этого вам понадобится карта куба . По сути, вы визуализируете куб вокруг камеры и наносите текстуру на внутреннюю поверхность каждой грани куба. Я полагаю, что OpenGL может включить это в свой конвейер фиксированных функций, но в случае, если вы используете шейдерный подход (в любом случае фиксированная функция устарела), вам следует использовать сэмплеры карты куба (samplerCUBE в Cg, не уверенный в GLSL). При рисовании карты куба вы также хотите удалить перевод из матрицы вида модели, но сохранить вращение (это заставляет скайбокс «следовать» за камерой, но позволяет вам смотреть на разные части неба).

Лучше всего на самом деле нарисовать карту куба после рисования всех непрозрачных объектов. Это может показаться странным, потому что по умолчанию небо будет блокировать другие объекты, но вы избегаете этого, используя следующий прием (если используете шейдеры): при записи конечной позиции вывода в вершинном шейдере вместо записи .xyzw пишите .xyww , Это заставит небо улететь в дальнюю плоскость, что заставит его быть позади всего. Преимущество этого состоит в том, что оверрейд равен 0!

5 голосов
/ 25 сентября 2010

Да.

Создание действительно большой сферы имеет две основные проблемы. Во-первых, вы можете столкнуться с проблемами с отсечкой. Небо может исчезнуть, если оно находится за пределами вашего дальнего расстояния. Кроме того, объекты, которые входят в ваш небесный бокс с расстояния, визуально проходят через очень прочную стену. Во-вторых, вы тратите много полигонов (и много боли) на очень простой эффект.

Большинство людей на самом деле используют маленький куб (отсюда и название «Небесный ящик»). Вам необходимо визуализировать куб в предварительном проходе с отключенным тестированием глубины. Таким образом, все объекты будут отображаться поверх куба независимо от их фактического расстояния до вас. Просто убедитесь, что длина стороны больше, чем в два раза больше вашего ближнего расстояния, и все будет в порядке.

0 голосов
/ 16 января 2017

Сферами приятно обращаться, поскольку они легко избегают искажений, углов и т. Д., Которые могут быть видны в некоторых ситуациях. Другая возможность - цилиндр.

Для действительно высококачественного неба вы можете выполнить имитацию освещения неба, задавая цвета сферы в зависимости от времени (=> положение солнца!) И направления, а также добавить несколько облаков в качестве трехмерных объектов между сферой неба и положением вида. .

...