После ключевого слова texture следует имя файла с текстурой в двойных кавычках.

Для задания способа вычисления текстурных координат служит команда тар, имеющая следующий вид: тар (их иу uz) uOffs (vx vy vz) vOffs

После ключевого слова map идет набор из восьми чисел, задающий аффинный закон вычисления текстурных координат. Для точки с координатами (х, у, г) соответствующие текстурные координаты вычисляются по следующим формулам:

u = ux*x + uy*y + uz*z + uOffs,
v = vx*x + vy*y + vz*z + vOffs.

Команда vertex служит для задания очередной вершины многоугольника. Она принимает один из следующих видов:

vertex (х у z)

vertex (х у z), (u v)

vertex (х у z), (u v), (r g b a)

Эта команда задает координаты вершины, а также текстурные координаты и цвет в качестве необязательных параметров. Координаты текстуры, если они не заданы явно, вычисляются по ранее приведенным формулам. Если цвет не задан, то он полагается равным цвету, задаваемому командой color, или (1, 1, 1, 1), если эта команда отсутствует.

Задание портала осуществляется аналогично заданию грани, но вместо ключевого слова polygon используется слово portal и добавляется еще одна команда - connect. Она задает комнату, в которую ведет портал, и имеет следующий вид:

connect subscene-name

Для создания объекта класса World по sc-файлу будем использовать объект класса SceneDecoder, который из-за своих размеров в книге не приводится, но полностью содержится на компакт-диске.

Когда все основные объекты созданы, то процесс рендеринга сцены и управление перемещением игрока выглядят следующим образом (фактически это просто цикл обработки сообщений):

.д.

for ( ; ; )
{
autoreleasePool -> releaseAll ();

Пишем портальный рендерер (часть I)

if ( PeekMessage ( &msg, NULL, О, 0, PM NO REMOVE ) ) {

if ( IGetMessage ( &msg, NULL, 0, 0 ) ) return msg.wParam;
TranslateMessage ( &msg ) ; DispatchMessage ( &msg ) ;
}
el se
if ( view -> isVisible () )
{
view -> lock () ;
if ( controller -> update () == controllerQuit ) return 0;

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