OGRE的思想是这样的:将现实世界中的场景划分成抽象的不同空间,区域中还可以划分成不同的小空间,每个空间由一个SceneNode对象来管理,SceneNode将处理移动、旋转和缩放等与空间相关的行为。在每个SceneNode上可以挂接各种场景元素(如:Entity 、Light、Camera等),场景元素本身并不负责与空间位置相关的行为,全部交给SceneNode来做(Light 和Camera类也保存自己的位置,但很多时候也都挂接到SceneNode上来处理,见后详述)。 OGRE将大量SceneNode按照空间的划分层次组织成树状结构,从而完成对整个场景的有序组织。场景结构图如下:
根节点的位置往往在场景的中心。每个节点对象都用数据成员保存相对于父节点的相对位移和相对旋转量(这一点很重要)。节点类提供节点的移动和旋转函数。这样当节点1发生移动和旋转的时候,其全部子节点及它们挂接的场景元素也将被动地移动和旋转。想象一下5个人和一条狗坐在汽车里的情况,当车转弯的时候,5个人和狗的相对位置虽然没有变,但他们都随着汽车转动了!这就是用节点树组织场景的巨大威力。再想一下,当缩小并旋转根节点的时候,整个世界都缩小和旋转起来。
OGRE提供一个SceneManager类来负责整个场景节点树的维护。SceneManager还负责Entity、Light和Camera的管理和维护。所以我们在对场景进行操作的时候更多的是与SceneManager打交道。
(摘自 《OGRE使用指南》)
浙公网安备 33010602011771号