OGRE乱记二

        不特别注明,均为网上所摘的一些笔记喽。

        3D场景是一个3D程序的实质性的内容。如果3D物体及各种光被胡乱堆砌在场景里,那么场景也就不是场景而是垃圾场了。场景需要有序的组织,这是任何一个3D引擎都必须解决的问题。
 OGRE为了解决场景管理的问题提出了几个重要的概念并将它们实现为引擎中的类:
 Entity:场景元素,Mesh(模型)在场景中的实例。
 Light:场景元素,现实世界的光在场景中的实例。
 Camera:场景元素,现实世界的观察者在场景中的实例。
 SceneNode:抽象的场景管理单元。
 注意到SceneNode和其它几个概念不一样,其它几个概念都是现实事物的程序抽象,而SceneNode在现实世界中并不存在,它是为了组织场景而提出的抽象概念。
OGRE的思想是这样的:将现实世界中的场景划分成抽象的不同空间,区域中还可以划分成不同的小空间,每个空间由一个SceneNode对象来管理,SceneNode将处理移动、旋转和缩放等与空间相关的行为。在每个SceneNode上可以挂接各种场景元素(如:Entity 、Light、Camera等),场景元素本身并不负责与空间位置相关的行为,全部交给SceneNode来做(Light 和Camera类也保存自己的位置,但很多时候也都挂接到SceneNode上来处理,见后详述)。 OGRE将大量SceneNode按照空间的划分层次组织成树状结构,从而完成对整个场景的有序组织。场景结构图如下:
 
场景结构图
根节点的位置往往在场景的中心。每个节点对象都用数据成员保存相对于父节点的相对位移和相对旋转量(这一点很重要)。节点类提供节点的移动和旋转函数。这样当节点1发生移动和旋转的时候,其全部子节点及它们挂接的场景元素也将被动地移动和旋转。想象一下5个人和一条狗坐在汽车里的情况,当车转弯的时候,5个人和狗的相对位置虽然没有变,但他们都随着汽车转动了!这就是用节点树组织场景的巨大威力。再想一下,当缩小并旋转根节点的时候,整个世界都缩小和旋转起来。
OGRE提供一个SceneManager类来负责整个场景节点树的维护。SceneManager还负责Entity、Light和Camera的管理和维护。所以我们在对场景进行操作的时候更多的是与SceneManager打交道。

       帧监听器对输入事件的处理方法有两种模式:立即模式和缓冲模式。一般来讲立即模式适合于3D场景漫游过程,当在每帧渲染之前,系统捕获输入设备状态,并根据这些状态对场景中的物体和摄象机进行控制。而缓冲模式适合于GUI界面的情况(如设置菜单),输入设备状态可以被发送到各GUI元素进行处理(如按钮被按下)。

       所以,ExampleFrameListener的构造函数有useBufferedInput参数,缺省情况是false,也就是采用立即模式。此外,ExampleFrameListener的构造函数还需要渲染窗口和当前摄象机为参数,因为OGRE支持多窗口渲染和多摄象机,ExampleFrameListener需要知道控制的作用对象。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值