Main Page Modules Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages

# deScene.hpp

Go to the documentation of this file.

    00001 ///////////////////////////////////////////////////////////////////////////////
    00002 /// @file deScene.hpp
    00003 ///
    00004 /// @brief scene-management routines
    00005 ///
    00006 /// @author Assassin
    00007 ///
    00008 /// This file is the intellectual property of Novus Delta, LLC.. Usage of the
    00009 /// contents of this file is subject to the Destiny3D Member License which
    00010 /// can be found at http://www.destiny3d.com.  Any other usage is prohibited.
    00011 ///
    00012 /// This file is distributed "AS IS" without warranty of any kind.  Novus
    00013 /// Delta, LLC. does not guarantee the fitness of the contents of this file
    00014 /// for any particular purpose.
    00015 ///
    00016 /// Copyright (C) 2001-2003 Novus Delta, LLC. All Rights Reserved.
    00017 ///
    00018 /// <hr>
    00019 ///                                 Change History
    00020 /// <hr>
    00021 ///
    00022 /// @date Mar 2002
    00023 /// @author Assassin
    00024 /// @remarks Creation
    00025 ///
    00026 /// @date Mar 2003
    00027 /// @author Masterg
    00028 /// @remarks Terrain added
    00029 ///
    00030 ///////////////////////////////////////////////////////////////////////////////
    00031
    00032 #ifndef DESCENE_HPP
    00033 #define DESCENE_HPP
    00034
    00035 // get rid of the annoying diamond-inheritance warning
    00036 #pragma warning (disable : 4250)
    00037
    00038 #include "deGlobalTypes.hpp"
    00039 #include "deMath.hpp"           // transforms
    00040 #include "deWorld.hpp"          // world object
    00041 #include "deRenderStates.hpp"   // renderlight
    00042
    00043 #if defined(DESCENE_DLL_EXPORTS) || defined(DESTINY3D_EXPORT_ALL)
    00044 #   define DESCENE_API extern "C" DEDLL_EXPORT
    00045 #elif defined(DESTINY3D_STATIC_LINK)
    00046 #   define DESCENE_API extern "C"
    00047 #else
    00048 #   define DESCENE_API extern "C" DEDLL_IMPORT
    00049 #endif
    00050
    00051 #ifdef USING_DESTINY3D
    00052 #ifdef _DEBUG
    00053 #   ifdef DESTINY3D_STATIC_LINK
    00054 #       pragma comment(lib, "deScene_sd")
    00055 #   else
    00056 #       pragma comment(lib, "deScened")
    00057 #   endif //DESTINY3D_STATIC_LINK
    00058 #else
    00059 #   ifdef DESTINY3D_STATIC_LINK
    00060 #       pragma comment(lib, "deScene_s")
    00061 #   else
    00062 #       pragma comment(lib, "deScene")
    00063 #   endif //DESTINY3D_STATIC_LINK
    00064 #endif //_DEBUG
    00065 #endif //USING_DESTINY3D
    00066
    00067 // external
    00068 class IdeActor;
    00069 class IdeAnimatedMesh;
    00070 class IdeBitmapProxy;
    00071 class IdeBoundingVolume;
    00072 class IdeCamera;
    00073 class IdeDriver;
    00074 class IdeLineBrush;
    00075 class IdeMesh;
    00076 class IdePlaneFrustum;
    00077 class IdePortal;
    00078 class IdeRender;
    00079 class IdeRenderLight;
    00080 class IdeRenderMaterial;
    00081 class IdeRenderTexture;
    00082 class IdeSurface;
    00083 class IdeVertexBuffer;
    00084 class IdeWorld;
    00085
    00086 //defined within
    00087 class IdeSceneGraph;
    00088 class IdeCollision;
    00089 class IdeSceneRoom;
    00090 class IdeSceneObject;
    00091 class IdeSceneABT;
    00092 class IdeSceneActor;
    00093 class IdeSceneSky;
    00094 class IdeSceneStaticMesh;
    00095 class IdeSceneTerrain;
    00096 class IdeSceneLight;
    00097
    00098 // deprecated
    00099 class IdeSceneAnimatedMesh;
    00100
    00101 // factory functions
    00102 DESCENE_API deBoolean       IdeScene_Initialize();
    00103 DESCENE_API void            IdeScene_ShutDown();
    00104 /// Get the IdeSceneGraph singleton pointer
    00105 DESCENE_API IdeSceneGraph*  IdeSceneGraph_GetSceneGraphPtr();
    00106 /// Create an instance of IdeCollision
    00107 DESCENE_API IdeCollision*   IdeCollision_CreateCollision();
    00108 /// Get the IdeSceneRoom WorldObject interface ID
    00109 DESCENE_API long            IdeSceneRoom_GetWOInterfaceID();
    00110 /// Get the IdeSceneObject WorldObject interface ID
    00111 DESCENE_API long            IdeSceneObject_GetWOInterfaceID();
    00112
    00113 //specific factory functions
    00114 /// create an instance of IdeSceneABT
    00115 DESCENE_API IdeSceneABT *       IdeSceneObject_CreateSceneABT();
    00116 /// create an instance of IdeSceneActor
    00117 DESCENE_API IdeSceneActor*      IdeSceneObject_CreateSceneActor();
    00118 DESCENE_API IdeSceneAnimatedMesh* IdeSceneObject_CreateSceneAnimatedMesh();
    00119 /// create an instance of IdeSceneRoom
    00120 DESCENE_API IdeSceneRoom*       IdeSceneRoom_CreateRoom();
    00121 /// create an instance of IdeSceneSky
    00122 DESCENE_API IdeSceneSky *       IdeSceneObject_CreateSceneSky();
    00123 /// create an instance of IdeSceneStaticMesh
    00124 DESCENE_API IdeSceneStaticMesh* IdeSceneObject_CreateSceneStaticMesh();
    00125 /// create an instance of IdeSceneTerrain
    00126 DESCENE_API IdeSceneTerrain*    IdeSceneObject_CreateSceneTerrain();
    00127 /// create an instance of IdeSceneLight
    00128 DESCENE_API IdeSceneLight*      IdeSceneObject_CreateSceneLight();
    00129
    00130 /// @TODO remove IdeScene_TestABT
    00131 DESCENE_API deBoolean       IdeScene_TestABT();
    00132
    00133
    00134 //=============================================================
    00135 /// used to store & retrieve collision information.
    00136 /// Related functions: IdeCollision_CreateCollision.
    00137 //class IdeCollision
    00138 DE3D_INTERFACE_(IdeCollision)
    00139 {
    00140 protected:
    00141     virtual ~IdeCollision() {}
    00142 public:
    00143     /// release the collision class (deletes it)
    00144     virtual long Release() = 0;
    00145
    00146     /// level of detail needed for collision
    00147     enum deCollideDetail
    00148     {
    00149         deCollidePoint      =0x01,      ///< use a point or ray
    00150         deCollideSphere     =0x02,      ///< use a point with radius
    00151         deCollideAABB       =0x04,      ///< use axis-aligned bounding boxes
    00152         deCollideOBB        =0x08,      ///< use oriented bounding boxes
    00153         deCollide_32Bit = 0x7fffffff
    00154     };
    00155     /// information about the object that will be colliding with things
    00156     struct deCollideParams
    00157     {
    00158         deVec3d Start;                  ///< start point in universal space
    00159         deVec3d Delta;                  ///< movement from start point
    00160         deBoundSphere Sphere;           ///< bounding sphere for colliding object
    00161         deAABB AABB;                    ///< AABB for colliding object
    00162         IdeBoundingVolume* CustomBV;    ///< Custom Bounding Volume for colliding object
    00163         deCollideDetail ThisDetail;     ///< collision detail for this object (fill in relevant members: AABB, OBB, etc)
    00164         deCollideDetail WorldDetail;    ///< collision detail for other world objects
    00165     };
    00166     /// information about a collision that occurred
    00167     struct deCollideInfo
    00168     {
    00169         deVec3d     Position;           ///< position at which collision occurs
    00170         deVec3d     Normal;             ///< normal of surface which was collided with
    00171         deDouble    Percent;            ///< percent along the (start,stop) segment where collision occurred
    00172         DWORD               Contents;
    00173         IdeSurface*         Surface;
    00174         IdeSceneObject*     HitObject;
    00175         IdeSceneRoom*       HitRoom;
    00176     };
    00177
    00178     /// clear out all the collisions that have accrued
    00179     virtual void        Reset() = 0;
    00180
    00181     /// returns the number of collisions accrued
    00182     virtual long        GetNumCollisions() = 0;
    00183     /// retrieves a specific collision occurrence
    00184     virtual void        GetCollision(long ColNum, deCollideInfo & collision) = 0;
    00185
    00186     // for use by engine only
    00187     virtual deBoolean   AddCollision(const deCollideInfo & collision) = 0;
    00188 };
    00189
    00190 //=============================================================
    00191 /// The interface class for storing and querying a 3D scene.
    00192 /// Related functions: IdeSceneGraph_GetSceneGraphPtr.
    00193 //class IdeSceneGraph
    00194 DE3D_INTERFACE_(IdeSceneGraph)
    00195 {
    00196 protected:
    00197     virtual ~IdeSceneGraph() {}
    00198
    00199 public:
    00200     struct deSceneTraversal
    00201     {
    00202         // input parameters
    00203         IdeCamera * cam;
    00204         IdeRender * render;
    00205         long MaxTPortalDepth;
    00206         //temporaries
    00207         long CurrentPortalDepth;
    00208         long CurrentPassNum;
    00209         IdeSceneGraph* CurrentSceneGraph;
    00210         IdePlaneFrustum* CurrentFrustum;
    00211         deTransformInfo CurrentTransform;
    00212         //output values
    00213         deDouble FarthestDistanceFound;
    00214     };
    00215
    00216     // used internally by the engine only
    00217     virtual long Traverse(deSceneTraversal* Params) = 0;
    00218
    00219     /// specify a set of cull flags. Use bitwise OR to combine elements of deCullModes
    00220     virtual deBoolean   SetCullFlags(long CullFlags) = 0;
    00221     /// retrieve the current cull flags set
    00222     virtual long        GetCullFlags() = 0;
    00223
    00224     /// specify a set of debug flags. Use bitwise OR to combine elements of deDebugFlags
    00225     virtual deBoolean   SetDebugFlags(long DebugFlags) = 0;
    00226     /// retrieve the current debug flags set
    00227     virtual long        GetDebugFlags() = 0;
    00228
    00229     virtual IdeSceneRoom * FindRoomWithID(deWorldID WorldID, deObjectID ObjectID) = 0;
    00230
    00231     /// Add an IdeSceneRoom object to the scenegraph
    00232     virtual deBoolean AddRoom(IdeSceneRoom * Room) = 0;
    00233     /// Remove an IdeSceneRoom object from the scenegraph
    00234     virtual deBoolean RemoveRoom(IdeSceneRoom* Room) = 0;
    00235
    00236     virtual deBoolean AddSceneObject(IdeSceneObject* Object) = 0;
    00237     virtual void RemoveSceneObject(IdeSceneObject* Object) = 0;
    00238     virtual void RepositionSceneObject(IdeSceneObject* Object) = 0;
    00239
    00240     // used internally by the engine only
    00241     virtual deBoolean PortalOccluded(IdePortal * portal) = 0;
    00242
    00243     virtual DWORD TestIntersection(const deVec3d &Position, const deVec3d *Mins, const deVec3d *Maxs) = 0;
    00244     /// test whether a collision occurs when using given Params
    00245     virtual deBoolean TestCollision(const IdeCollision::deCollideParams & Params, IdeCollision * Collision) = 0;
    00246     /// considers only the objects intersected at the start point
    00247     virtual void ObjectExtents(IdeBoundingVolume* volume, IdeCollision * Results) = 0;
    00248     virtual long LightExtents(const deVec3d& pos, const deAABB& bbox, IdeSceneLight** outBuffer, long bufferSize) = 0;
    00249
    00250     /// different methods of culling that can be done in the scenegraph traversal
    00251     enum deCullModes
    00252     {
    00253         // backface is done in hardware
    00254         deCullFrustum           =(0x0001),      ///< cull using a view frustum
    00255         deCullDetail            =(0x0002),      ///< cull using screen-contribution metric
    00256         deCullOccludeSphere     =(0x0004),      ///< cull using sphere occlusion
    00257         deCullOccludeConvHull   =(0x0008),      ///< cull using convex hull occlusion (not implemented)
    00258         deCullOccludeRaster     =(0x0010),      ///< cull using image-space occlusion (not implemented)
    00259         deCullFarPlaneOptimize  =(0x0020),      ///< not culling technically, but it can improve visual quality
    00260         deCull_Max,
    00261         deCull_32bit=(0x7fffffff)
    00262     };
    00263
    00264     /// debug flags for helping examine things
    00265     enum deDebugFlags
    00266     {
    00267         deDrawAABB              =(0x0001),      ///< render AABB's for objects (in blue)
    00268         deDrawOBB               =(0x0002),      ///< render OBB's for objects (in red)
    00269         deDrawSphere            =(0x0004),      ///< render bounding spheres for objects
    00270         deDrawSpatialPartition  =(0x0008),      ///< render the scenegraph octree
    00271         deDebugFlag_Max,
    00272         deDebugFlag_32bit=(0x7fffffff)
    00273     };
    00274
    00275     /// possible contents
    00276     enum deContents
    00277     {
    00278         deContentsNone          =(0x00000000),  ///< nothing here (note: you can't do a bitwise-AND and get 1 with this)
    00279         deContentsClear         =(0x00000001),  ///< see-through
    00280         deContentsOpaque        =(0x00000002),  ///< not see-through
    00281         deContentsSolid         =(0x00000004),  ///< impassable
    00282         deContentsUser10        =(0x00100000),
    00283         deContentsUser09        =(0x00200000),
    00284         deContentsUser08        =(0x00400000),
    00285         deContentsUser07        =(0x00800000),
    00286         deContentsUser06        =(0x01000000),
    00287         deContentsUser05        =(0x02000000),
    00288         deContentsUser04        =(0x04000000),
    00289         deContentsUser03        =(0x08000000),
    00290         deContentsUser02        =(0x10000000),
    00291         deContentsUser01        =(0x20000000),
    00292         deContents_Max,
    00293         deContents_32bit=(0x7fffffff)
    00294     };
    00295 };
    00296
    00297 //=============================================================
    00298 /// a base class for dealing with Scene Rooms, which can contain objects and link to other Scene Rooms.
    00299 /// Related functions: IdeSceneRoom_CreateRoom, IdeSceneRoom_GetWOInterfaceID.
    00300 //class IdeSceneRoom : virtual public IdeWorldObject
    00301 DE3D_INTERFACE(IdeSceneRoom, IdeWorldObject)
    00302 {
    00303 protected:
    00304     virtual ~IdeSceneRoom() {}
    00305 public:
    00306
    00307     // used internally by the engine only
    00308     virtual void SetRoomListPtr(void * ptr) = 0;
    00309     virtual void*GetRoomListPtr() = 0;
    00310
    00311     // used internally by the engine only
    00312     virtual long Traverse(IdeSceneGraph::deSceneTraversal* Params) = 0;
    00313     virtual deBoolean TestCollision(const IdeCollision::deCollideParams & Params, IdeCollision * Collision) = 0;
    00314     virtual long GetPassNum() = 0;
    00315     virtual void GetAABB(deVec3d &Min, deVec3d &Max) = 0;
    00316
    00317     virtual void  SetContents(DWORD contents) = 0;
    00318     virtual DWORD GetContents() = 0;
    00319
    00320     /// add an IdeSceneObject to the scene room
    00321     virtual deBoolean AddSceneObject(IdeSceneObject * obj) = 0;
    00322     /// remove an IdeSceneObject from the scene room
    00323     virtual deBoolean RemoveSceneObject(IdeSceneObject * obj) = 0;
    00324     /// add a portal to the scene room
    00325     virtual deBoolean AddPortal(IdePortal * portal) = 0;
    00326 };
    00327
    00328 //=============================================================
    00329 /// A base class for dealing with Scene Objects. A scene object occupies the space
    00330 /// that is defined by scene rooms.
    00331 /// Related functions: IdeSceneObject_GetWOInterfaceID.
    00332 //class IdeSceneObject : virtual public IdeWorldObject
    00333 DE3D_INTERFACE(IdeSceneObject, IdeWorldObject)
    00334 {
    00335 protected:
    00336     virtual ~IdeSceneObject() {}
    00337 public:
    00338
    00339     enum activate_t
    00340     {
    00341         activate_visible = 0,
    00342         activate_collide = 1,
    00343         activate_count,
    00344         activate_32bit =0x7fffffff
    00345     };
    00346
    00347     // list of sub-class types for GetSOInterface
    00348     enum interface_t
    00349     {
    00350         iface_IdeSceneObject=0,
    00351         iface_IdeSceneStaticMesh=1,
    00352         iface_IdeSceneSky=2,
    00353         iface_IdeSceneTerrain=3,
    00354         iface_IdeSceneABT=4,
    00355         iface_IdeSceneAnimatedMesh=5,
    00356         iface_IdeSceneActor=6,
    00357         iface_IdeSceneLight=7,
    00358         // 6 is max
    00359         iface_32Bit=0x7fffffff
    00360     };
    00361     virtual IdeSceneObject::interface_t GetSOIType() = 0;
    00362     virtual void* GetSOInterface(IdeSceneObject::interface_t i) = 0;
    00363
    00364     virtual void        PreCache(IdeDriver* pDriver) = 0;
    00365
    00366     // used internally by the engine only
    00367     virtual long        Traverse(IdeSceneGraph::deSceneTraversal* Params) = 0;
    00368
    00369     /// Set the activation state of the object
    00370     virtual void        SetActivation(activate_t a_type, deBoolean Active) = 0;
    00371     /// Retrieve the activation state of the object
    00372     virtual deBoolean   GetActivation(activate_t a_type) const = 0;
    00373
    00374     /// retrieve the world transformation of this object.
    00375     /// All bounding volumes are relative to the translation of this
    00376     virtual void        GetWorldTransform(deTransformInfo & mat) = 0;
    00377     /// set the world transformation of this object
    00378     virtual void        SetWorldTransform(const deTransformInfo & mat) = 0;
    00379
    00380     /// retrieve the local AABB (computed as the extents of the object on its local axes)
    00381     virtual void        GetLocalAABB(deAABB &bbox) = 0;
    00382     /// retrieve the oriented bounding box in world coordinates (local AABB transformed into world space)
    00383     virtual void        GetWorldOBB(deOBB &bbox) = 0;
    00384     /// retrieve the world AABB of the object. This AABB is guaranteed to contain the world OBB
    00385     /// for the current orientation, and may contain the OBB no matter what its orientation.
    00386     virtual void        GetWorldAABB(deAABB &bbox) = 0;
    00387
    00388     virtual deVec3d     GetBoundCenter() = 0;
    00389     virtual deVec3d     GetOccludeCenter() = 0;
    00390     virtual void        GetWorldPos(deVec3d & PosVector) = 0;
    00391
    00392     virtual deVec3d     GetWorldBoundCenter() = 0;
    00393     virtual deVec3d     GetWorldOccludeCenter() = 0;
    00394     virtual deDouble    GetBoundRadius() = 0;
    00395     virtual deDouble    GetOccludeRadius() = 0;
    00396
    00397     virtual deBoolean   IsTransparent() = 0;
    00398
    00399     virtual deBoolean   OccludesObject(deVec3d &position, IdeSceneObject *so, deVec3d &NormalizedDisplacement) = 0;
    00400
    00401     // used internally by the engine only
    00402     virtual long        GetCurrentPassNum() const = 0;
    00403     virtual deBoolean   AddRoomReference(IdeSceneRoom * ref, void * ptr) = 0;
    00404     virtual void*       GetRoomReference(IdeSceneRoom * ref) = 0;
    00405     virtual deBoolean   RemoveRoomReference(IdeSceneRoom * ref) = 0;
    00406 };
    00407
    00408 //=============================================================
    00409 /// scene object used for storing & rendering large, static polygonal datasets.
    00410 /// Related functions: IdeSceneObject_CreateSceneABT
    00411 //class IdeSceneABT : virtual public IdeSceneObject
    00412 DE3D_INTERFACE(IdeSceneABT, IdeSceneObject)
    00413 {
    00414 protected:
    00415     virtual ~IdeSceneABT() {}
    00416 public:
    00417     virtual deBoolean AddGeometry(IdeMesh* pMesh, const deTransformInfo & worldpos) = 0;
    00418 };
    00419
    00420 //=============================================================
    00421 /// scene object used for storing & rendering large terrains based on heightmaps.
    00422 /// Related functions: IdeSceneObject_CreateSceneTerrain
    00423 //class IdeSceneTerrain : virtual public IdeSceneObject
    00424 DE3D_INTERFACE(IdeSceneTerrain, IdeSceneObject)
    00425 {
    00426 protected:
    00427     virtual ~IdeSceneTerrain() {}
    00428 public:
    00429     virtual deBoolean SetTerrainHeightMap(IdeBitmapProxy * bmp) = 0;
    00430     virtual deBoolean SetTerrainColorMap(IdeBitmapProxy * bmp) = 0;
    00431     virtual deBoolean SetTerrainDetailMap(IdeBitmapProxy * bmp) = 0;
    00432
    00433     virtual deVec3d GetTerrainScale() = 0;
    00434     virtual void SetTerrainScale(deVec3d vScale) = 0;
    00435     virtual void SetTerrainScale(deFloat x, deFloat y, deFloat z) = 0;
    00436
    00437     virtual deTexCoord GetDetailRepeat() = 0;
    00438     virtual void SetDetailRepeat(deTexCoord Repeat) = 0;
    00439     virtual void SetDetailRepeat(deFloat u, deFloat v) = 0;
    00440
    00441     virtual void SetHeightAt(unsigned char ucHeight, long x, long y) = 0;
    00442     virtual unsigned char GetTrueHeightAt(long x, long y) = 0;
    00443     virtual deFloat GetScaledHeightAt(long x, long y) = 0;
    00444
    00445     virtual deDouble GetLODBias() = 0;
    00446     virtual void SetLODBias(deDouble Bias) = 0;
    00447
    00448     virtual long GetGMMChunkSize() = 0;
    00449     virtual void SetGMMChunkSize(long ChunkSize) = 0;
    00450
    00451     virtual deBoolean BuildRenderable() = 0;
    00452     virtual deBoolean BuildGeoMipMap(IdeDriver* pDriver) = 0;
    00453 };
    00454
    00455 //=============================================================
    00456 /// scene object used for rendering 360-degree skies, for atmospheric effect without a lot of geometry.
    00457 /// Related functions: IdeSceneObject_CreateSceneSky
    00458 //class IdeSceneSky : virtual public IdeSceneObject
    00459 DE3D_INTERFACE(IdeSceneSky, IdeSceneObject)
    00460 {
    00461 protected:
    00462     virtual ~IdeSceneSky() {}
    00463 public:
    00464
    00465     enum SkyType
    00466     {
    00467         SKY_NONE = 0,
    00468         SKY_BOX,
    00469         SKY_DOME,
    00470         SKY_SECTOR,
    00471         SKY_FORCE_32BIT = 0x7fffffff
    00472     };
    00473
    00474     struct SkyInfo
    00475     {
    00476         union Box_t
    00477         {
    00478             struct FaceNames_t
    00479             {
    00480                 IdeBitmapProxy * NegX;
    00481                 IdeBitmapProxy * NegY;
    00482                 IdeBitmapProxy * NegZ;
    00483                 IdeBitmapProxy * PosX;
    00484                 IdeBitmapProxy * PosY;
    00485                 IdeBitmapProxy * PosZ;
    00486             } FaceNames;
    00487             IdeBitmapProxy* Faces[6];
    00488         };
    00489
    00490         struct Dome_t
    00491         {
    00492             /// @todo implement sky dome
    00493         };
    00494
    00495         struct Sector_t
    00496         {
    00497             /// @todo implement sky sector
    00498         };
    00499
    00500         SkyType type;
    00501         union
    00502         {
    00503             Box_t Box;
    00504             Dome_t Dome;
    00505             Sector_t Sector;
    00506         };
    00507     };
    00508
    00509     virtual deBoolean   IsLockedToCam() const = 0;
    00510     virtual void        LockToCam(deBoolean Lock) = 0;
    00511
    00512     virtual deBoolean   GetInfo(SkyInfo * info) const = 0;
    00513     virtual deBoolean   SetInfo(const SkyInfo * info) = 0;
    00514 };
    00515
    00516
    00517
    00518 //=============================================================
    00519 //class IdeSceneAnimatedMesh : virtual public IdeSceneObject
    00520 DE3D_INTERFACE(IdeSceneAnimatedMesh, IdeSceneObject)
    00521 {
    00522 protected:
    00523     virtual ~IdeSceneAnimatedMesh() {}
    00524 public:
    00525     virtual void SetMesh(IdeAnimatedMesh * mesh) = 0;
    00526 };
    00527
    00528 //=============================================================
    00529 /// used to create instances of a static mesh in a scene.
    00530 /// Related functions: IdeSceneObject_CreateSceneStaticMesh
    00531 //class IdeSceneStaticMesh : virtual public IdeSceneObject
    00532 DE3D_INTERFACE(IdeSceneStaticMesh, IdeSceneObject)
    00533 {
    00534 protected:
    00535     virtual ~IdeSceneStaticMesh() {}
    00536 public:
    00537     virtual void SetMesh(IdeMesh* mesh) = 0;
    00538     virtual void SetTransparent(deBoolean Trans) = 0;
    00539 };
    00540
    00541 //=============================================================
    00542 /// used to create instances of actors in a scene.
    00543 /// Related functions: IdeSceneObject_CreateSceneActor
    00544 //class IdeSceneActor : virtual public IdeSceneObject
    00545 DE3D_INTERFACE(IdeSceneActor, IdeSceneObject)
    00546 {
    00547 protected:
    00548     virtual ~IdeSceneActor() {}
    00549 public:
    00550     virtual void SetActor(IdeActor* actor) = 0;
    00551 };
    00552
    00553 //=============================================================
    00554 /// used to place lights in a scene.
    00555 /// Related functions: IdeSceneObject_CreateSceneLight
    00556 //class IdeSceneLight : virtual public IdeSceneObject
    00557 DE3D_INTERFACE(IdeSceneLight, IdeSceneObject)
    00558 {
    00559 protected:
    00560     virtual ~IdeSceneLight() {}
    00561 public:
    00562     virtual void SetLightData(const IdeRenderLight::LightData& lightdata) = 0;
    00563     virtual const IdeRenderLight::LightData* GetLightData() = 0;
    00564     virtual const IdeRenderLight* GetRenderLight() = 0;
    00565 };
    00566
    00567 #endif
    00568
    00569
    00570
    00571
    00572
    00573
    00574
    00575
    00576
    00577
    00578
    00579
    00580
    00581
    00582
    00583
    00584
    00585
    00586
    00587
    00588
    00589