Ogre监听框架构成:
Ogre主要通过继承FrameListener来完成监听系统的输入并变化场景内容的功能,对于非控制性的变化,Ogre也可以通过类ExampleFrameListener来完成
在FrameListener中,主要有以下的方法:
--------------------------------------------------------------------------------------------------
1.
帧渲染之前的事件处理方法,发生在即将要进行渲染的时候,返回值为帧就可以继续渲染,为假说明要终止当前的渲染循环。
2.
发生在所有的渲染目标都已经就绪,但是窗口还没有交换缓存之前,
3.
帧渲染之后的事件处理方法,在一个帧正在被渲染的时候调用,这个时间发生在所有的渲染目标都已经完全更新并且缓存已经交换的时候
--------------------------------------------------------------------------------------------------
Ogre引擎在渲染过程中的每一帧之前调用frameStarted方法,而之后会调用frameEnded方法,通过这种方式,可以再渲染期间对场景物体(包括摄像机)进行移动、缩放等控制,当然也可以完成其他的处理 。
而frameStarted和frameEnded都以FrameEvent为参数,在FrameListener中,定义了如下的FrameEvent结构来表示一次帧渲染时事件,在这个结构中定义的两个元素时间可以方便我们对于帧事件的处理:
Struct FrameEvent
{
}
“Listener”是一个设计来响应程序的特殊事件,唤醒回调过程的类,为了得到对于帧事件的有序响应,使用者必须要创建一个frameListener 的子类,并覆盖其中的响应方法。使用Root::addFrameListener传递一个此类的实例,这种注册是没有限制的,用户可以为不同的需要注册不同的监听,但是这都需要在一个帧监听循环中发生,否则监听只对于一个渲染目标是有用的。
帧监听的处理模式:
1.
2.
ExampleFrameListener中的主要成员:
ExampleFrameListener(继承自frameListener,例子程序中的主要使用监听基类)中的主要成员函数
1.
更新状态的函数,主要是完成overlay的 元素的状态显示更新
2.
ExampleFrameListener(RenderWindow *win,Camera *cam,bool BufferedKeys=false,bool bufferedMouse=false,bool
传入参数很多,主要是给类中的成员注册信息,然后是初始化一些句柄内容
3.
4.
5.
(主要是销毁鼠标键盘和操纵杆,最后不要忘记还要将InputManager销毁)
6.
1