Ogre场景管理器SceneManager类

来源:互联网 发布:人民的名义 知乎 编辑:程序博客网 时间:2024/05/16 16:02

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);

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/w1635610/archive/2010/04/02/5446053.aspx