тл

class World : public Model {
protected:
Array scenes;
SubScene * currentSubScene; Vector3D updateSize; Array polys;

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

public:
World ( const char * theName ) ,--World () ,-
// methods for rendering and getting // potential colliders virtual void render ( Views view,
const Cameras camera ); virtual void getColliders ( const BoundingBoxS
area, Arrays colliders ) ,-virtual void update ( Controller *,
float systemTime ); virtual bool pointVisibleFrom ( const Vector3D& from,
const Vector3D& to ) const;
bool addScene ( SubScene * scene );
Texture * getTexture ( const Strings theName ) const; SubScene * getSubScene ( const Vector3DS pos ) const;
SubScene * getSubScene ( const Strings theName ) const {
return (SubScene *)scenes.getObjectWithName ( theName );
}
static MetaClass classlnstance;
} ;

Вместо явного задания сцены внутри исходного кода на языке С++ гораздо у удобнее хранить сцену внутри текстового файла (для таких файлов мы будем далее использовать расширение хс) и читать ее как ресурс.

Осталось только разработать формат файла, содержащего описание сцены, и класс, отвечающий за загрузку сцены из этого файла.

При задании сцены мы будем использовать координатную систему, изображенную на рис. 7.5.

При этом оси Ох и Ог идут в горизонтальной плоскости, а ось Оу направлена вверх.

Ниже приводится пример простого описания сцены.

camera position (0, 1, 0 ) angles ( 0, 0, 0 )
subscene nameOO {
polygon frontl {
texture "..\Textures\Oakqrtrt.jpg" mapping (0 -1.390625 0) 0 (1 0 0) 0
vertex (12 5) vertex (10 5) vertex (-5 0 5) vertex (-5 2 5)
}
portal front2 {
connect name00_2
vertex (3 2 5) , (0,0)
vertex (3 0 5), (0,0)
vertex (10 5), (0,0)
vertex (1 2 5), (0,0)
}
polygon front3 {
texture "..\Textures\Oakqrtrt.jpg"
mapping (0 -1.390625 0) 0 (-1 0 0) 0
vertex (5 2 5)

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