Home | Namespaces | Hierarchy | Alphabetical List | Class list | Files | Namespace Members | Class members | File members | Tutorials
ISceneManager.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #ifndef __I_SCENE_MANAGER_H_INCLUDED__
6 #define __I_SCENE_MANAGER_H_INCLUDED__
7 
8 #include "IReferenceCounted.h"
9 #include "irrArray.h"
10 #include "irrString.h"
11 #include "path.h"
12 #include "vector3d.h"
13 #include "dimension2d.h"
14 #include "SColor.h"
15 #include "ETerrainElements.h"
16 #include "ESceneNodeTypes.h"
18 #include "EMeshWriterEnums.h"
19 #include "SceneParameters.h"
20 #include "IGeometryCreator.h"
21 #include "ISkinnedMesh.h"
22 
23 namespace irr
24 {
25  struct SKeyMap;
26  struct SEvent;
27 
28 namespace io
29 {
30  class IReadFile;
31  class IAttributes;
32  class IWriteFile;
33  class IFileSystem;
34 } // end namespace io
35 
36 namespace gui
37 {
38  class IGUIFont;
39  class IGUIEnvironment;
40 } // end namespace gui
41 
42 namespace video
43 {
44  class IVideoDriver;
45  class SMaterial;
46  class IImage;
47  class ITexture;
48 } // end namespace video
49 
50 namespace scene
51 {
53 
56  {
59 
62 
65 
68 
70 
83 
86 
89 
92 
95  };
96 
97  class IAnimatedMesh;
98  class IAnimatedMeshSceneNode;
99  class IBillboardSceneNode;
100  class IBillboardTextSceneNode;
101  class ICameraSceneNode;
102  class IDummyTransformationSceneNode;
103  class ILightManager;
104  class ILightSceneNode;
105  class IMesh;
106  class IMeshBuffer;
107  class IMeshCache;
108  class IMeshLoader;
109  class IMeshManipulator;
110  class IMeshSceneNode;
111  class IMeshWriter;
112  class IMetaTriangleSelector;
113  class IParticleSystemSceneNode;
114  class ISceneCollisionManager;
115  class ISceneLoader;
116  class ISceneNode;
117  class ISceneNodeAnimator;
118  class ISceneNodeAnimatorCollisionResponse;
119  class ISceneNodeAnimatorFactory;
120  class ISceneNodeFactory;
121  class ISceneUserDataSerializer;
122  class ITerrainSceneNode;
123  class ITextSceneNode;
124  class ITriangleSelector;
125  class IVolumeLightSceneNode;
126 
127  namespace quake3
128  {
129  struct IShader;
130  } // end namespace quake3
131 
133 
150  class ISceneManager : public virtual IReferenceCounted
151  {
152  public:
153 
155 
399  virtual IAnimatedMesh* getMesh(const io::path& filename) = 0;
400 
402 
408  virtual IAnimatedMesh* getMesh(io::IReadFile* file) = 0;
409 
411 
414  virtual IMeshCache* getMeshCache() = 0;
415 
417 
419  virtual video::IVideoDriver* getVideoDriver() = 0;
420 
422 
425 
427 
429  virtual io::IFileSystem* getFileSystem() = 0;
430 
432 
446  const u32 subdivU = 32, const u32 subdivV = 32,
447  const video::SColor foot = video::SColor(51, 0, 230, 180),
448  const video::SColor tail = video::SColor(0, 0, 0, 0),
449  const core::vector3df& position = core::vector3df(0,0,0),
450  const core::vector3df& rotation = core::vector3df(0,0,0),
451  const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0;
452 
454 
464  virtual IMeshSceneNode* addCubeSceneNode(f32 size=10.0f, ISceneNode* parent=0, s32 id=-1,
465  const core::vector3df& position = core::vector3df(0,0,0),
466  const core::vector3df& rotation = core::vector3df(0,0,0),
467  const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0;
468 
470 
484  virtual IMeshSceneNode* addSphereSceneNode(f32 radius=5.0f, s32 polyCount=16,
485  ISceneNode* parent=0, s32 id=-1,
486  const core::vector3df& position = core::vector3df(0,0,0),
487  const core::vector3df& rotation = core::vector3df(0,0,0),
488  const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0;
489 
491 
502  ISceneNode* parent=0, s32 id=-1,
503  const core::vector3df& position = core::vector3df(0,0,0),
504  const core::vector3df& rotation = core::vector3df(0,0,0),
505  const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f),
506  bool alsoAddIfMeshPointerZero=false) = 0;
507 
509 
519  virtual IMeshSceneNode* addMeshSceneNode(IMesh* mesh, ISceneNode* parent=0, s32 id=-1,
520  const core::vector3df& position = core::vector3df(0,0,0),
521  const core::vector3df& rotation = core::vector3df(0,0,0),
522  const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f),
523  bool alsoAddIfMeshPointerZero=false) = 0;
524 
526 
541  f32 waveHeight=2.0f, f32 waveSpeed=300.0f, f32 waveLength=10.0f,
542  ISceneNode* parent=0, s32 id=-1,
543  const core::vector3df& position = core::vector3df(0,0,0),
544  const core::vector3df& rotation = core::vector3df(0,0,0),
545  const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0;
546 
547 
549 
561  virtual IMeshSceneNode* addOctreeSceneNode(IAnimatedMesh* mesh, ISceneNode* parent=0,
562  s32 id=-1, s32 minimalPolysPerNode=512, bool alsoAddIfMeshPointerZero=false) = 0;
563 
565 
567  s32 id=-1, s32 minimalPolysPerNode=512, bool alsoAddIfMeshPointerZero=false)
568  {
569  return addOctreeSceneNode(mesh, parent, id, minimalPolysPerNode, alsoAddIfMeshPointerZero);
570  }
571 
573 
585  virtual IMeshSceneNode* addOctreeSceneNode(IMesh* mesh, ISceneNode* parent=0,
586  s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false) = 0;
587 
589 
591  s32 id=-1, s32 minimalPolysPerNode=256, bool alsoAddIfMeshPointerZero=false)
592  {
593  return addOctreeSceneNode(mesh, parent, id, minimalPolysPerNode, alsoAddIfMeshPointerZero);
594  }
595 
597 
613  virtual ICameraSceneNode* addCameraSceneNode(ISceneNode* parent = 0,
614  const core::vector3df& position = core::vector3df(0,0,0),
615  const core::vector3df& lookat = core::vector3df(0,0,100),
616  s32 id=-1, bool makeActive=true) = 0;
617 
619 
636  f32 rotateSpeed=-1500.f, f32 zoomSpeed=200.f,
637  f32 translationSpeed=1500.f, s32 id=-1, f32 distance=70.f,
638  bool makeActive=true) =0;
639 
641 
705  f32 rotateSpeed = 100.0f, f32 moveSpeed = 0.5f, s32 id=-1,
706  SKeyMap* keyMapArray=0, s32 keyMapSize=0, bool noVerticalMovement=false,
707  f32 jumpSpeed = 0.f, bool invertMouse=false,
708  bool makeActive=true) = 0;
709 
711 
723  virtual ILightSceneNode* addLightSceneNode(ISceneNode* parent = 0,
724  const core::vector3df& position = core::vector3df(0,0,0),
725  video::SColorf color = video::SColorf(1.0f, 1.0f, 1.0f),
726  f32 radius=100.0f, s32 id=-1) = 0;
727 
729 
748  const core::dimension2d<f32>& size = core::dimension2d<f32>(10.0f, 10.0f),
749  const core::vector3df& position = core::vector3df(0,0,0), s32 id=-1,
750  video::SColor colorTop = 0xFFFFFFFF, video::SColor colorBottom = 0xFFFFFFFF) = 0;
751 
753 
768  video::ITexture* left, video::ITexture* right, video::ITexture* front,
769  video::ITexture* back, ISceneNode* parent = 0, s32 id=-1) = 0;
770 
772 
790  u32 horiRes=16, u32 vertRes=8,
791  f32 texturePercentage=0.9, f32 spherePercentage=2.0,f32 radius = 1000.f,
792  ISceneNode* parent=0, s32 id=-1) = 0;
793 
795 
808  bool withDefaultEmitter=true, ISceneNode* parent=0, s32 id=-1,
809  const core::vector3df& position = core::vector3df(0,0,0),
810  const core::vector3df& rotation = core::vector3df(0,0,0),
811  const core::vector3df& scale = core::vector3df(1.0f, 1.0f, 1.0f)) = 0;
812 
814 
870  const io::path& heightMapFileName,
871  ISceneNode* parent=0, s32 id=-1,
872  const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f),
873  const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f),
874  const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f),
875  video::SColor vertexColor = video::SColor(255,255,255,255),
876  s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0,
877  bool addAlsoIfHeightmapEmpty = false) = 0;
878 
880 
908  io::IReadFile* heightMapFile,
909  ISceneNode* parent=0, s32 id=-1,
910  const core::vector3df& position = core::vector3df(0.0f,0.0f,0.0f),
911  const core::vector3df& rotation = core::vector3df(0.0f,0.0f,0.0f),
912  const core::vector3df& scale = core::vector3df(1.0f,1.0f,1.0f),
913  video::SColor vertexColor = video::SColor(255,255,255,255),
914  s32 maxLOD=5, E_TERRAIN_PATCH_SIZE patchSize=ETPS_17, s32 smoothFactor=0,
915  bool addAlsoIfHeightmapEmpty = false) = 0;
916 
918 
921  virtual IMeshSceneNode* addQuake3SceneNode(const IMeshBuffer* meshBuffer, const quake3::IShader * shader,
922  ISceneNode* parent=0, s32 id=-1
923  ) = 0;
924 
925 
927 
931  virtual ISceneNode* addEmptySceneNode(ISceneNode* parent=0, s32 id=-1) = 0;
932 
934 
941  ISceneNode* parent=0, s32 id=-1) = 0;
942 
944  virtual ITextSceneNode* addTextSceneNode(gui::IGUIFont* font, const wchar_t* text,
945  video::SColor color=video::SColor(100,255,255,255),
946  ISceneNode* parent = 0, const core::vector3df& position = core::vector3df(0,0,0),
947  s32 id=-1) = 0;
948 
950 
961  virtual IBillboardTextSceneNode* addBillboardTextSceneNode( gui::IGUIFont* font, const wchar_t* text,
962  ISceneNode* parent = 0,
963  const core::dimension2d<f32>& size = core::dimension2d<f32>(10.0f, 10.0f),
964  const core::vector3df& position = core::vector3df(0,0,0), s32 id=-1,
965  video::SColor colorTop = 0xFFFFFFFF, video::SColor colorBottom = 0xFFFFFFFF) = 0;
966 
968 
994  virtual IAnimatedMesh* addHillPlaneMesh(const io::path& name,
995  const core::dimension2d<f32>& tileSize, const core::dimension2d<u32>& tileCount,
996  video::SMaterial* material = 0, f32 hillHeight = 0.0f,
997  const core::dimension2d<f32>& countHills = core::dimension2d<f32>(0.0f, 0.0f),
998  const core::dimension2d<f32>& textureRepeatCount = core::dimension2d<f32>(1.0f, 1.0f)) = 0;
999 
1001 
1023  virtual IAnimatedMesh* addTerrainMesh(const io::path& meshname,
1024  video::IImage* texture, video::IImage* heightmap,
1025  const core::dimension2d<f32>& stretchSize = core::dimension2d<f32>(10.0f,10.0f),
1026  f32 maxHeight=200.0f,
1027  const core::dimension2d<u32>& defaultVertexBlockSize = core::dimension2d<u32>(64,64)) = 0;
1028 
1030 
1041  virtual IAnimatedMesh* addArrowMesh(const io::path& name,
1042  video::SColor vtxColorCylinder=0xFFFFFFFF,
1043  video::SColor vtxColorCone=0xFFFFFFFF,
1044  u32 tesselationCylinder=4, u32 tesselationCone=8,
1045  f32 height=1.f, f32 cylinderHeight=0.6f,
1046  f32 widthCylinder=0.05f, f32 widthCone=0.3f) = 0;
1047 
1049 
1055  virtual IAnimatedMesh* addSphereMesh(const io::path& name,
1056  f32 radius=5.f, u32 polyCountX = 16,
1057  u32 polyCountY = 16) = 0;
1058 
1060 
1068  virtual IAnimatedMesh* addVolumeLightMesh(const io::path& name,
1069  const u32 SubdivideU = 32, const u32 SubdivideV = 32,
1070  const video::SColor FootColor = video::SColor(51, 0, 230, 180),
1071  const video::SColor TailColor = video::SColor(0, 0, 0, 0)) = 0;
1072 
1074 
1080  virtual ISceneNode* getRootSceneNode() = 0;
1081 
1083 
1090  virtual ISceneNode* getSceneNodeFromId(s32 id, ISceneNode* start=0) = 0;
1091 
1093 
1100  virtual ISceneNode* getSceneNodeFromName(const c8* name, ISceneNode* start=0) = 0;
1101 
1103 
1111 
1113 
1118  virtual void getSceneNodesFromType(ESCENE_NODE_TYPE type,
1120  ISceneNode* start=0) = 0;
1121 
1123 
1126  virtual ICameraSceneNode* getActiveCamera() const =0;
1127 
1129 
1131  virtual void setActiveCamera(ICameraSceneNode* camera) = 0;
1132 
1134  virtual void setShadowColor(video::SColor color = video::SColor(150,0,0,0)) = 0;
1135 
1137  virtual video::SColor getShadowColor() const = 0;
1138 
1140 
1148  virtual u32 registerNodeForRendering(ISceneNode* node,
1150 
1152 
1156  virtual void drawAll() = 0;
1157 
1159 
1164  virtual ISceneNodeAnimator* createRotationAnimator(const core::vector3df& rotationSpeed) = 0;
1165 
1167 
1180  const core::vector3df& center=core::vector3df(0.f,0.f,0.f),
1181  f32 radius=100.f, f32 speed=0.001f,
1182  const core::vector3df& direction=core::vector3df(0.f, 1.f, 0.f),
1183  f32 startPosition = 0.f,
1184  f32 radiusEllipsoid = 0.f) = 0;
1185 
1187 
1200  const core::vector3df& endPoint, u32 timeForWay, bool loop=false, bool pingpong = false) = 0;
1201 
1203 
1213  s32 timePerFrame, bool loop=true) = 0;
1214 
1216 
1221  virtual ISceneNodeAnimator* createDeleteAnimator(u32 timeMs) = 0;
1222 
1224 
1255  ITriangleSelector* world, ISceneNode* sceneNode,
1256  const core::vector3df& ellipsoidRadius = core::vector3df(30,60,30),
1257  const core::vector3df& gravityPerSecond = core::vector3df(0,-10.0f,0),
1258  const core::vector3df& ellipsoidTranslation = core::vector3df(0,0,0),
1259  f32 slidingValue = 0.0005f) = 0;
1260 
1262 
1271  const core::array< core::vector3df >& points,
1272  f32 speed = 1.0f, f32 tightness = 0.5f, bool loop=true, bool pingpong=false) = 0;
1273 
1275 
1293  virtual ITriangleSelector* createTriangleSelector(IMesh* mesh, ISceneNode* node) = 0;
1294 
1296 
1302 
1303 
1305 
1314 
1316 
1339  ISceneNode* node, s32 minimalPolysPerNode=32) = 0;
1340 
1342 
1344  ISceneNode* node, s32 minimalPolysPerNode=32)
1345  {
1346  return createOctreeTriangleSelector(mesh, node, minimalPolysPerNode);
1347  }
1348 
1350 
1358 
1360 
1366  ITerrainSceneNode* node, s32 LOD=0) = 0;
1367 
1369 
1375  virtual void addExternalMeshLoader(IMeshLoader* externalLoader) = 0;
1376 
1378  virtual u32 getMeshLoaderCount() const = 0;
1379 
1381 
1384  virtual IMeshLoader* getMeshLoader(u32 index) const = 0;
1385 
1387 
1393  virtual void addExternalSceneLoader(ISceneLoader* externalLoader) = 0;
1394 
1396  virtual u32 getSceneLoaderCount() const = 0;
1397 
1399 
1402  virtual ISceneLoader* getSceneLoader(u32 index) const = 0;
1403 
1405 
1408 
1410 
1412  virtual IMeshManipulator* getMeshManipulator() = 0;
1413 
1415 
1423  virtual void addToDeletionQueue(ISceneNode* node) = 0;
1424 
1426 
1428  virtual bool postEventFromUser(const SEvent& event) = 0;
1429 
1431 
1432  virtual void clear() = 0;
1433 
1435 
1440  virtual io::IAttributes* getParameters() = 0;
1441 
1443 
1450 
1452 
1455 
1457 
1459  virtual void registerSceneNodeFactory(ISceneNodeFactory* factoryToAdd) = 0;
1460 
1462  virtual u32 getRegisteredSceneNodeFactoryCount() const = 0;
1463 
1465 
1467  virtual ISceneNodeFactory* getSceneNodeFactory(u32 index) = 0;
1468 
1470 
1473 
1475 
1477  virtual void registerSceneNodeAnimatorFactory(ISceneNodeAnimatorFactory* factoryToAdd) = 0;
1478 
1480  virtual u32 getRegisteredSceneNodeAnimatorFactoryCount() const = 0;
1481 
1483 
1486 
1488  virtual const c8* getSceneNodeTypeName(ESCENE_NODE_TYPE type) = 0;
1489 
1491  virtual const c8* getAnimatorTypeName(ESCENE_NODE_ANIMATOR_TYPE type) = 0;
1492 
1494 
1496  virtual ISceneNode* addSceneNode(const char* sceneNodeTypeName, ISceneNode* parent=0) = 0;
1497 
1499 
1503  virtual ISceneNodeAnimator* createSceneNodeAnimator(const char* typeName, ISceneNode* target=0) = 0;
1504 
1506 
1524  virtual ISceneManager* createNewSceneManager(bool cloneContent=false) = 0;
1525 
1527 
1542  virtual bool saveScene(const io::path& filename, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0;
1543 
1545 
1560  virtual bool saveScene(io::IWriteFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0;
1561 
1563 
1580  virtual bool saveScene(io::IXMLWriter* writer, const io::path& currentPath, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* node=0) = 0;
1581 
1583 
1599  virtual bool loadScene(const io::path& filename, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* rootNode=0) = 0;
1600 
1602 
1618  virtual bool loadScene(io::IReadFile* file, ISceneUserDataSerializer* userDataSerializer=0, ISceneNode* rootNode=0) = 0;
1619 
1621 
1623  virtual IMeshWriter* createMeshWriter(EMESH_WRITER_TYPE type) = 0;
1624 
1626 
1628  virtual ISkinnedMesh* createSkinnedMesh() = 0;
1629 
1631  virtual void setAmbientLight(const video::SColorf &ambientColor) = 0;
1632 
1634  virtual const video::SColorf& getAmbientLight() const = 0;
1635 
1637 
1639  virtual void setLightManager(ILightManager* lightManager) = 0;
1640 
1642 
1644  virtual const IGeometryCreator* getGeometryCreator(void) const = 0;
1645 
1647 
1655  virtual bool isCulled(const ISceneNode* node) const =0;
1656  };
1657 
1658 
1659 } // end namespace scene
1660 } // end namespace irr
1661 
1662 #endif
1663 

The Irrlicht Engine
The Irrlicht Engine Documentation © 2003-2010 by Nikolaus Gebhardt. Generated on Mon May 6 2013 07:45:59 by Doxygen (1.8.1.2)