glTexCoord2f ( l.Of - invWidth [4],
l.Of- invHeight [4] ); glVertex3f ( pos.x + skySize, pos.y + skySize,
pos.z + skySize );
glTexCoord2f ( l.Of - invWidth [4], invHeight [4] ); glVertex3f ( pos.x - skySize, pos.y + skySize, pos.z + skySize );
glTexCoord2f ( invWidth [4], invHeight [4] ) ,-glVertex3f (.pos.x - skySize, pos.y - skySize, pos.z + skySize );
glEnd ( ) ;
}
if ( caméra.inViewingFrustrum ( downBox ) ) {
glBindTexture ( GL_TEXTURE_2D,
skyTextures [5] -> getld () ) ,-glBegin ( GL_QUADS );
glTexCoord2f ( invWidth [5], l.Of - invHeight [5] ) ; glVertex3d ( pos.x - skySize, pos.y - skySize, pos.z - skySize );
glTexCoord2f ( l.Of - invWidth [5],
l.Of - invHeight [5] ) ; glVertex3f ( pos.x - skySize, pos.y -t skySize,
pos.z - skySize );
glTexCoord2f ( l.Of - invWidth [5], invHeight [5] ); glVertex3f ( pos.x + skySize, pos.y + skySize, pos.z - skySize );
glTexCoord2f ( invWidth [5], invHeight [5] ); glVertex3f ( pos.x + skySize, pos.y - skySize, pos.z - skySize );
glEnd ();
}
}
Для поддержки эффекта неба в нашем рендерере добавим в загрузчик сцены следующую команду, которую можно задавать для каждой комнаты:
sky sky-name
Здесь sky-name является именем текстуры с путем и без суффиксов и расширений. Расширения и тип Jga добавляются автоматически. Ряд текстур для неба содержится на компакт-диске в каталоге Textures/Skies.
Обратите внимание на то, что у различных комнат может быть разное небо.
Объемный туман Еще одним достаточно простым эффектом является объемный туман. В библиотеке OpenGL есть стандартная поддержка тумана, когда грань затеняется пропорционально расстоянию до нее. Это делается при помощи функции glFog*. Однако гораздо чаще встречается другой вид тумана -слой тумана над полом, когда затеняется только часть комнаты, лежащая в слое тумана (рис. 12.2). Функция glFog для создания такого тумана явно не подходит.