Вычисления для ночной стороны проще. Нужно просто прочитать значение из «ночной» текстуры и умножить результат на 1,0 минус коэффициент облачности. Так как данный фрагмент находится в тени, компоненты рассеянного и зеркального отражения отсутствуют. Затем можно вычислить значение для каждого фрагмента. Существует коэффициент рассеянного освещения, больший нуля в освещенных областях, меньший нуля в затененных областях, и около нуля возле терминатора. Используя условные выражения, значение daytime подставляется для освещенных областей, ni ghttime - для неосвещенных, а возле терминатора задается постепенный переход.
Затем для получения окончательного цвета фрагмента добавляется значение прозрачности 1,0. Полученное изображение с нескольких точек обзора показано на цветном рис. 6. На первом изображении рисунка можно увидеть замечательное зеркальное отражение Мексиканского залива; а если присмотреться к третьему (ночному) изображению, можно увидеть облака, скрывающие центральную часть восточного побережья Соединенных Штатов и северо-западную часть Бразилии.
Этот шейдер не является универсальным, так как он учитывает тип геометрической фигуры (сфера). Изображение, нарисованное с использованием данного шейдера, будет «правильным», только если сфера имеет правильные текстурные координаты. Его можно еще больше усовершенствовать, чтобы добиться большей реалистичности изобраясения. Цвет атмосферы может различаться в зависимости
Шейдеры с сохранением данных в текстурах
от точки обзора и координат источника освещения (Солнце). Он более красный ближе к границе тени - тот цвет, который мы часто наблюдаем при восходах и закатах. Читатель может обратиться по ссылкам в конце главы и узнать, как получить более реалистичные эффекты, например рэлеевское рассеяние.
Листинг 10,4. Фрагментный шейдер «как вращается мир»
uniform sampler2D EarthDay; uniform sampler2D EarthNight: uniform sampler2D EarthCloudGloss:
varying float Diffuse: varying vec3 Specular: varying vec2 TexCoord: