В данном фрагментом шейдере входные текстурные координаты sat (компоненты встроенной varying-переменной gl_TexCoord0) используются для поиска значения в текстуре, связанной с текстурным модулем 0. Результат умножается на значение интенсивности освещения, вычисленное вершинным шейдером

Шейдеры с сохранением данных в текстурах

и переданное в varying-переменной. Затем значение цвета приводится к определенному диапазону и учитывается значение прозрачности 1,0 для получения окончательного цвета фрагмента, отправляемого на завершающую обработку, включая проверку глубины. Полученное изображение сферы показано на цветном рис. 3.

Листинг 10.2. Пример фрагментного шейдера для простого наложения текстуры

varying float Lightlntensity: uniform sampler2D EarthTexture:
void main (void) {
vec3 lightColor = vec3 (texture2D(EarthTexture. gl_TexCoord[0].st)): gl_FragColor = vec4 (lightColor * Lightlntensity. 1.0):
}

10.3. Пример множественной текстуры

Окончательное изображение выглядит неплохо, однако, приложив немного больше усилий, можно его улучшить. Известно, что на нашей планете огромное количество искусственных источников освещения, и в ночное время большие мегаполисы и города будут видны как пятна света даже из космоса. Используем угол между направлением света и нормалью в каждой точке поверхности и определим, на дневной или ночной стороне находится точка. Для точек, расположенных на дневной поверхности, будет использована «дневная» текстура (обычное изображение, без городского освещения), а для точек на ночной поверхности - «ночная» текстура (без освещения обычным источником освещения, но с учетом городского освещения). Дневная и ночная текстуры показаны на цветном рис. 5.

Другая не совеем реалистичная особенность - отсутствие отражения солнечного света от поверхности океанов и больших озер. Вода очень хорошо отражает свет, и когда линия падения и отражения почти совпадают, мы должны видеть отраженное освещение. Но у пустынь, травы и деревьев такого свойства нет, так что нужно подумать, как создать отражение от воды, но не от суши.


⇐ Предыдущая| |Следующая ⇒