void draw ( Views view, const Cameras camera,
const Vector4DS color, Fog * fog, Texture * txt = NULL, bool transparent = false ) const;
void apply ( const Transform3Ds );
void computeNormals (); void buildBoundingBox (),-
static MetaClass classlnstance;
protected:
void rebuildFaces ( Face * theFaces, Vector2D *
theTexCoords, int nTexCoords );
static int _cdecl compFunc ( const void * eleml,
const void * elem2 );
};

Удобно "завернуть" объект класса Mesh3D в класс VisualObject. Это позволит не только применять различные преобразования к этому объекту, изменять его цвет, но также и разделять экземпляры класса Mesh3D между разными объектами, т. е. если в сцене встречается много экземпляров одного и того же объекта Mesh3D, то сам этот объект будет храниться всего один раз и только "оборачивающие" его объекты VisualObject будут разными. Поскольку в сцене часто встречается много экземпляром одинаковых моделей, то получается несомненный выигрыш по памяти.

Ниже приводится описание класса MeshObject, служащего для инкапсуляции модели внутри себя.

Добавляем модели

class MeshObject : public VisualObject {
protected:
Mesh3D * mesh; public:
MeshObject ( const char * theName, const Vector3DS thePos, const Vector4DS theColor, const Transform3DS theTr, Mesh3D * theMesh = NULL );
-MeshObject ();
Mesh3D * getMesh () const
{
return mesh;
}
void setMesh ( Mesh3D * theMesh ); virtual bool isTransparent () const; static MetaClass classlnstance;
protected:
virtual void buildBoundingBox ();
virtual void doDraw ( Views view,
const Cameras camera, const Frustrums frustrum. Fog * fog ) ;
};

Метод doDraw этого класса выглядит следующим образом:

void MeshObject : : draw ( Views view, const Cameras
camera, const Frustrums frustrum, Fog * fog )
{
mesh -> draw ( view, camera, color, fog );
}

Введем теперь в объекты VisualObject поддержку простейшей анимации, которая может происходить полностью автоматически, без учета наблюдателя. Для этого предлагается использовать следующий класс:


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