1 National Aeronautics and Space Administration (NASA) - государственная организация США, занимающаяся исследованием космоса. - Примеч. перев.

.10.2. Простой пример текстурирования

texLoc = glGëtUniformLocationARBCprogramObj. "EarthTexture") : gl Uni formli ARSCtexLoc. 0);

Координаты источника освещения соответствуют точке, расположенной на линии обзора перед объектом. Пусть для текстуры изображения земли используется текстурный модуль 0, тогда именно это значение нужно занести в переменную-семплер.

Приложение может вызывать функции OpenGL для рисования сферы, потом на нее будет наложена текстура с изображением Земли. Для каждой вершины должны быть заданы нормаль поверхности, двухмерные координаты текстуры и координаты вершины.

10.2.2. Вершинный шейдер

Вершинный шейдер, используемый в этом простом примере, очень похож на простой шейдер кирпичной стены (см, раздел 6.2). Главное отличие в том, что здесь текстурные координаты передаются как вершинные атрибуты, через встроенную varying-переменную д1_ТехСоогх!Ш (листинг 10.1).

Листинг 10.1. Вершинный шейдер для простого наложения текстуры

varying float Lightlntensity: uniform vec3 LightPosition:
const float specularContribution = 0.1:
const float diffuseContribution = 1.0 - specularContribution:
void maint void) {
vec3 ecPosition = vec3 <gl_ModelV1ewMatrix * gl_Vertex):
vec3 tnorm = normalizetgl JtormalMatrix * gljtormal);
vec3 lightVec = nornnalizeTLightPosition - ecPosition).;
vec3 reflectlfec = reflect(-lightVec. tnorm):
vec3 viewVec = normalize(-ecPositioh):
float spec = clamp(dot(ref1ectVec. viewVec). 0.0. 1.0): spec = powtspec. 16.0).:
Lightlntensity = diffuseContribution * max(dot(lightVec, tnorm). 0.0) + specularContribution * spec;
gl_TexCoord[0] = glJ4ultiTexCoord0: g]_Position = ftransformO :
}

10.2.3. Фрагментный шейдер

Фрагментный шейдер (листинг 10.2) будет накладывать текстуру на входные геометрические фигуры. Например, если определена сфера, где текстурная координатам обозначает долготу (то есть 0е долготы - s = 0, 360° долготы - s = 1,0), а текстурная координата t обозначает широту (90° южной широты - t = 0,0, а 90° северной широты - t = 1,0), можно наложить текстуру на сферу так, как показано на цветном рис. 3.


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