координат объекта.

Если координаты вычисляются с использованием ОЕ_ЕУЕ_ЫМЕА11, то применяется следующая формула:

8 = РЛ + РгУ< + РзЧ + РдЧ (4-7> где р[, р'г, р'3 и р\ - значения, определяемые следующей формулой:

 (4.8)

Здесь значения рх,рг,ръ и рЛ - значения, переданные в parms, аМматрица видового преобразования (model-view matrix).

Значения (хе, уе, zt,we) являются координатами вершины в системе координат камеры (наблюдателя).

В случае когда рпате равен GL_SPHERE_MAP, a coord равно GL_S или GL_T, то сначала по следующей формуле вычисляется отраженный вектор:

f = и-2(п,и)п , (4.9)

где п - единичный вектор нармали после преобразования в систему координат камеры; и - единичный вектор в направленный из начала координат к соответствующей вершине (в системе координат камеры). Тогда соответствующая текстурная координата вычисляется по формуле

5 = ^+0.5, t = ^ + 0.5, /n = 2j// + /,2 + (/z+l)2. (4.10) mm

Последний способ вычисления текстурных координат служит для получения эффекта, называемого environment mapping, когда создается иллюзия отражения в объекте окружающей среды. На самом деле заранее готовится текстура, содержащая вид на окружающую среду и накладывается на объект с использованием этого способа вычисления текстурных координат. Ниже приводится пример программы, демонстрирующей этот эффект.

<ЛL

float angle = O.Of;
unsigned textureld = -1;
AUX_RGBImageRec * localTexture = NULL;
void init () {
glClearColor ( 0, 0, 0, 1 ); glEnable ( GL_DEPTH_TEST );
glEnable ( GL_TEXTURE_2D );
glEnable ( GL_CULL_FACE );
}
void animate () {
angle += l.Of; glutPostRedisplay ();
}

void display О {

glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture ( GL_TEXTURE_2D, textureld );
glTexEnvf ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
GL_DECAL );
glTexGeni ( GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP ) ;
glTexGeni ( GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP );
glPushMatrix ();

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