glPushAttrib ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glDepthFunc ( GL_EQUAL ); glDepthMask ( GL_FALSE ); glEnable ( GL_BLEND );
glBlendFunc ( GL_DST_COLOR, GL_SRC_COLOR );
glMatrixMode ( GL_TEXTURE ); glPushMatrix ();
glScalef ( World :: detailTextureScale, World ::
detailTextureScale, World :: detailTextureScale );
glColor3f ( 1, 1, 1 );
//in case it has other value from prev calls
view.bindTexture ( World :; detailTexture );
for ( Array :: Iterator it = polyList.getlterator (); lit.end (); ++it )
{
Polygon3D * poly = (Polygon3D *) it.value (); view.simpleDraw ( *poly, 0 );
}
glPopMatrix () ,-glPopAttrib ();
}

Задание параметров микрофасетной текстуры осуществляется через статические ноля объекта World.

Проверка того, следует ли накладывать микрофасетную текстуру на данную грань, может быть реализована следующим образом:

II check for detail texture
if ( poly -> testFlag ( PF_HAS_DETAIL_TEXTURE ) && World :: detailTexture != NULL ) if ( poly -> getBoundingBox ().getDistanceTo ( camera.getPos (),camera.getViewCir () ) < World :: detailDistance )
detailPolys.insert ( poly );

Панели (billboard)

Одним из достаточно часто встречающихся объектов (в частности, мы будем использовать их при работе с системами частиц) являются прямоугольные грани, всегда расположенные параллельно картинной плоскости. Такие объекты, как правило, задаются при помощи положения своего центра и своего размера, а их точная ориентация определяется ориентацией камеры. Обычно они называются панелями (billboard).

Рассмотрим, каким образом можно построить такой объект.

Камера определяет систему координат наблюдателя и соответствующий ей ортонормированный базис (векторы view, up и right). При этом картинная плоскость строится по векторам следующим образом: р = eye + х-right + у up , (12.5)

где величины х и у пробегают все действительные значения.

Теперь если нужно построить прямоугольник с центром в точке pos, размером width х height и параллельный картинной плоскости, то он будет задаваться следующей формулой (рис. 12.6):


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