7.2.3渲染到纹理 

渲染到纹理的实现手段:直接复制帧缓存(Frame Buffer)中的像素;使用像素缓存设备;使用帧缓存对象(Frame Buffer Object,FBO)

定义一种不参与显示的,由应用程序创建的帧缓存,称之为帧缓存对象(FBO)。

7.3视景器

相机节点解决了高效地实现三维世界向二维窗口的变换;图形设备确立了相机拍摄的内容与某个图形窗口或像素缓存设备的对应关系;那么视景器的工作就是高效地将一个或多个相机组织在一起,并结合场景节点的更新与遍历,将相机在每一帧所拍摄的内容连续地播放出来,从而实现一个完整的三维仿真系统的主要工作。

场景器的主要工作是:管理场景所对应的一个或多个节点树(getscene),它是整个三维世界的主要数据组织者和保存者;

                                    管理场景中所有相机(getcamera,getcontext,getwindow),进而管理所有的图形设备,

                                     执行场景的仿真循环,

                                    管理多个参与更新、裁减、和绘制过程的线程

          记录场景的统计信息

单视景器和多视景器            单视景器类osgViewer::View类,多视景器类osgViewer::compositeViewer

一个多视景器的程序会同时打开多个窗口,也可能几个视图共享同一个窗口并在其分列显示,他们的渲染由多视景器的frame()函数统一进行调度

osgState类记录当前视图的各种统计信息,getviewerstate获取

osg::FrameStamp记录了当前运行的帧数,并作为系统运行的全局时间戳。getframestamp()

 

第八章 人机交互与图形用户接口

8.1获取鼠标和键盘消息

8.1.1事件适配器

主要使用osgGA来处理用户的交互动作       osg使用GraphicsContext的派生类来表示图形设备的系统底层接口

在用户端,通常使用GUIEventAdapt作为系统交互事件和OSG交互事件的适配接口,它定义了一个且仅有一个人机交互事件

交互事件类型可以使用getEventType()获取,键盘按键值使用getKey()获取,持续作用的键盘控制键使用getModKeyMask()获取,持续作用的鼠标按键使用getButtonMask

8.1.2动作适配器

用户向系统传递请求(常见的用户请求包括窗口的刷新以及鼠标坐标的设置)通过GUIActionAdapter来实现。

8.1.3事件队列与处理器

对于所有传递给场景的鼠标和键盘事件,可使用EventQueue来记录所有输入设备和系统事件的一个数据队列,并使用GUIEventHandler及派生类将这些事件传递给用户进行处理。

访问器osgGA::EventVisitor类,作为场景访问的主要执行者,负责区分和调用各个节点、可绘制体及渲染状态集的事件回调对象。

GUIEventHandler类派生自节点回调类nodecallback和可绘制体回调类Drawale::EventCallback,因此可以作为回调对象。

事件适配器ca表示当前传入此处理器的事件,它只可以被获取,不能修改,动作适配器aa是一个可以获取也可以修改的参数,事实上,大部分时候这个传入值表示当前所用的视图对象view,可以用他来获取或控制视景器的状态变化;对象指针object可能是当前事件回调的node节点指针,也可能是drawable指针,;nv为当前事件访问器的指针

8.2三维人机交互工具

OSG实现了三维场景的漫游以及场景中三维对象的操纵这两种主要的三维场景交互方式

P217