首先一个
Entity
对象必须
Attach
到一个
SceneNode
。
1.
创建一个
SceneNode
:
SceneManager::getRootSceneNode() (在 SceneManager::init 时会创建一个 RootNode )
à SceneNode::createChildSceneNode()
à Node::createChild()
主要的操作在这个函数中完成,首先调用虚函数 SceneNode::createChildImpl (),此函数又会调用 OctreeSceneManager::createSceneNode (),此函数会 new 一个 SceneNode 的派生类对象,这里是 OctreeNode ,并加入到 SceneNodeList mSceneNodes 中;随后又进行了坐标变换;最后将此指针又加入到 ChildNodeMap mChildren 中,然后返回此指针;
SceneManager::getRootSceneNode() (在 SceneManager::init 时会创建一个 RootNode )
à SceneNode::createChildSceneNode()
à Node::createChild()
主要的操作在这个函数中完成,首先调用虚函数 SceneNode::createChildImpl (),此函数又会调用 OctreeSceneManager::createSceneNode (),此函数会 new 一个 SceneNode 的派生类对象,这里是 OctreeNode ,并加入到 SceneNodeList mSceneNodes 中;随后又进行了坐标变换;最后将此指针又加入到 ChildNodeMap mChildren 中,然后返回此指针;
2.
将
Entity Attach
到
SceneNode
:
SceneNode:: attachObject()
;
3.
渲染从
Root::startRendering()
函数开始,此函数启动一个循环,每次执行
Root::renderOneFrame
()
à Root::_updateAllRenderTargets
<
à Root::_updateAllRenderTargets
<

本文详细解析了Ogre 3D引擎中Entity如何通过SceneNode进行渲染,从Root::startRendering开始,经过SceneNode的更新、RenderQueue的组织、可见性判断,到最后的RenderSystem渲染操作。特别强调了SceneManager在渲染流程中的作用,包括对象的分组、空间管理、RenderQueue的处理,以及透明物体的渲染顺序问题。
最低0.47元/天 解锁文章
548

被折叠的 条评论
为什么被折叠?



