SceneManager类
场景管理类,是场景管理的核心类。
SceneManager类内部保存std::map类型的CameraList、LightList、EntityList和SceneNodeList,并提供各种方法对它们进行管理和维护。SceneNode自身的设计使SceneNodeList实际上是一个树状结构。在每个SceneNode中引用CameraList、LightList、EntityList中的元素实现了场景元素在SceneNode上的挂接。SceneManager类还直接保存场景节点树的根节点指针以提供该树的访问入口。
重要函数
缺省构造函数
SceneManager();
缺省析构函数
virtual ~SceneManager();
摄像机相关函数
virtual Camera* createCamera(const String& name);
virtual Camera* getCamera(const String& name);
virtual void removeCamera(Camera *cam);
virtual void removeCamera(const String& name);
virtual void removeAllCameras(void);
光相关函数
virtual Light* createLight(const String& name);
virtual Light* getLight(const String& name);
virtual void removeLight(const String& name);
virtual void removeLight(Light* light);
virtual void removeAllLights(void);
材质相关函数
virtual Material* createMaterial(const String& name);
返回一个指向缺省材质设定的指针,用这个指针可以改变材质的设定
缺省设定如下:
- ambient = ColourValue::White
- diffuse = ColourValue::White
- specular = ColourValue::Black
- emmissive = ColourValue::Black
- shininess = 0
- No texture layers (& hence no textures)
- SourceBlendFactor = SBF_ONE
- DestBlendFactor = SBF_ZERO (no blend, replace with new
colour)
- Depth buffer checking on
- Depth buffer writing on
- Depth buffer comparison function = CMPF_LESS_EQUAL
- Culling mode = CULL_CLOCKWISE
- Ambient lighting = ColourValue(0.5, 0.5, 0.5) (mid-grey)
- Dynamic lighting enabled
- Gourad shading mode
- Bilinear texture filtering
virtual Material* getDefaultMaterialSettings(void);
virtual void addMaterial(const Material& mat);
virtual Material* getMaterial(const String& name);
virtual Material* getMaterial(int handle);
场景节点相关函数
virtual SceneNode* createSceneNode(void);
virtual SceneNode* createSceneNode(const String& name);
virtual void destroySceneNode(const String& name);
取得根节点,在整个场景中只有一个根节点
virtual SceneNode* getRootSceneNode(void) const;
virtual SceneNode* getSceneNode(const String& name) const;
用Mesh创建一个实体
virtual Entity* createEntity(const String& entityName, const String& meshName);
用预先提供的shape创建实体
PrefabType是一个枚举,提供预制的shape,不需要模型
enum PrefabType {
PT_PLANE
};
virtual Entity* createEntity(const String& entityName, PrefabType ptype);
virtual Entity* getEntity(const String& name);
销毁实体,注意实体必须没有被SceneNode所attach,如果你不确定是否还有实体被attach,使用SceneManager::clearScene()
virtual void removeEntity(Entity* ent);
virtual void removeEntity(const String& name);
virtual void removeAllEntities(void);
清空场景,包括SceneNodes,Cameras,Entities,Lights
virtual void clearScene(void);
设定环境光,缺省的环境光是ColourValue::Black
void setAmbientLight(ColourValue colour);
ColourValue getAmbientLight(void);
设定世界坐标系
virtual void setWorldGeometry(const String& filename);
从SceneManager处取得一个推荐的viewpoint,通常这个方法返回原点,除非通过SceneManager::setWorldGeometry设定了坐标系或者世界坐标系推荐了起始点。如果有多于一个的推荐点,将返回第一个,如果参数random为真,将随机的返回一个。
virtual ViewPoint getSuggestedViewpoint(bool random = false);
为SceneManager设定一个特殊实现的选项
virtual bool setOption( const String& strKey, const void* pValue ) { return false; }
virtual bool getOption( const String& strKey, void* pDestValue ) { return false; }
确认SceneManager是否有一个特殊实现的选项
virtual bool hasOption( const String& strKey ) { return false; }
virtual bool getOptionValues( const String& strKey, std::list<SDDataChunk>& refValueList ) { return false; }
virtual bool getOptionKeys( std::list<String>& refKeys ) { return false; }
Enables / Disables一个天空面
virtual void setSkyPlane(
bool enable,
const Plane& plane,
const String& materialName,
Real scale = 1000,
Real tiling = 10, bool drawFirst = true, Real bow = 0 );
Enables / Disables一个天空盒
virtual void setSkyBox(
bool enable,
const String& materialName,
Real distance = 5000,
bool drawFirst = true,
const Quaternion& orientation = Quaternion::IDENTITY );
Enables / Disables一个天空穹顶
virtual void setSkyDome(
bool enable,
const String& materialName,
Real curvature = 10,
Real tiling = 8, Real distance = 4000, bool drawFirst = true,
const Quaternion& orientation = Quaternion::IDENTITY);
雾相关函数
设置场景用的雾方式
void setFog(
FogMode mode = FOG_NONE,
ColourValue colour = ColourValue::White,
Real expDensity = 0.001,
Real linearStart = 0.0,
Real linearEnd = 1.0);
virtual FogMode getFogMode(void) const;
virtual const ColourValue& getFogColour(void) const;
virtual Real getFogStart(void) const;
virtual Real getFogEnd(void) const;
virtual Real getFogDensity(void) const;
公告板相关函数
virtual BillboardSet* createBillboardSet(const String& name, unsigned int poolSize = 20);
virtual BillboardSet* getBillboardSet(const String& name);
virtual void removeBillboardSet(BillboardSet* set);
virtual void removeBillboardSet(const String& name);
告知SceneManager是否渲染该节点
virtual void setDisplaySceneNodes(bool display);
动画相关函数
virtual Animation* createAnimation(const String& name, Real length);
virtual Animation* getAnimation(const String& name) const;
virtual void destroyAnimation(const String& name);
virtual void destroyAllAnimations(void);
virtual AnimationState* createAnimationState(const String& animName);
virtual AnimationState* getAnimationState(const String& animName);
virtual void destroyAnimationState(const String& name);
virtual void destroyAllAnimationStates(void);
手动渲染方法,高级用户使用
virtual void manualRender(
RenderOperation* rend, Material* mat, Viewport* vp,
const Matrix4& worldMatrix, const Matrix4& viewMatrix, const Matrix4& projMatrix) ;
Overlay相关函数
virtual Overlay* createOverlay(const String& name, ushort zorder = 100);
virtual Overlay* getOverlay(const String& name);
virtual void destroyOverlay(const String& name);
virtual void destroyAllOverlays(void);
注册一个新的渲染队列监听器,当渲染队列被处理时将被更新
virtual void addRenderQueueListener(RenderQueueListener* newListener);
virtual void removeRenderQueueListener(RenderQueueListener* delListener);