10/15/2011

Ogre(2)



Ogre的总体架构如下图,它主要是三个部分:
1. Scene Management,管理整个场景,包括模型如何组织,camera怎么放
2. Resource Management,管理资源,包括模型、纹理、字体等等,负责资源的加载、重用及释放
3. Rendering,对底层的rendering pipeline的包装,scene management用它来渲染场景内的内容。

对用户而言,root是他们所关心的,一切的开发从root开始。

另外,Ogre还有很多的plugin,可以根据需要来加载。


images/uml-overview
具体地看SceneManager

SceneManager管理着场景中的几乎所有东西:模型及其位置、camera、光、粒子等等。SceneManager还有很多种,如专门渲染地形的,渲染BSP maps的,等等(这里有详细列表)。

场景内的物体叫Entity,就是一些3D mesh。不过它只是单独的模型而已,并没有位置和朝向信息;所以Entity是不能直接加到场景里的,必须通过SceneNode. 

一个场景里可以有多个SceneNode,这些SceneNodes可以形成树状(parent node, child node,以及顶部的root node)。一个SceneNode可以attach多个Entity,也可以attach light object。但一个Entity attached 到一个SceneNode时,这个Entity才被渲染出来。注意,SceneNode的位置都是相对于parent SceneNode来的。




First Ogre application中一些代码的解释


mSceneMgr->setAmbientLight(Ogre::ColourValue(1.0, 1.0, 1.0)); //Ogre颜色采用RGB,每个值的范围在[0, 1]

Ogre::Entity* ogreHead = mSceneMgr->createEntity("Head", "ogrehead.mesh");//创建Entity,第一个参数是Entity的名称,必须是唯一的。第二个参数是要加载的mesh,这里用的是SDK中的资源

Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("HeadNode");//创建一个childSceneNode,参数是SceneNode的名称,同样必须是唯一的

headNode->attachObject(ogreHead); //将Entity attached 到 SceneNode上
翻译自Ogre Basic Tutorial 1

No comments:

Post a Comment