在Irrlicht中的SceneManager中的渲染单位是Scene Node。而Irrlicht中提供了ISceneNode接口供Scene Manager调用。而SceneManager实际上也是一个SceneNode,作为整个Scene Graph的Root节点。
在ISceneNode中的接口:
virtual void OnRegisterSceneNode():
负责根据自己的IsVisible(这个参数和该Node是否在View Frustrum中的可见性是不一样的),来确定是否将该Scene Node调用registerNodeForRendering。并且迭代调用自己的子节点。Scene Manager会在每一帧中调用OnRegisterSceneNode来促发这个过程。
virtual void OnAnimate(u32 timeMs)
对于该Scene Node的时间驱动接口。在每一帧中,Scene Manager会调用OnAnimate来促发。实际上Scene Manager整个Engine中Scene的Root。他本身就是一个Scene Node。
virtual void render() = 0;
对于该Scene Node的渲染接口,该接口应该完成这个Scene Node的渲染操作,注意是自己,与自己的子节点是独立的。在该接口中需要设定好Driver状态和自己的World矩阵,然后把自己渲染出来。(Scene Manager自己已经设定好了View和Project Matrix。在Camera Pass中设定好)。
virtual const core::aabbox3d& getBoundingBox() const = 0;
该Scene Node提供一个Bounding Box供cull使用。在Irrlicht中使用AABB 进行监测。
virtual video::SMaterial& getMaterial(u32 num)
提供该Scene Node的Material。
virtual u32 getMaterialCount() const
和getMaterial接口配套使用
阅读(628) | 评论(0) | 转发(0) |