8.2三维人机交互工具
osg实现了三维场景的漫游以及场景中三维对象的操纵。
8.2.1漫游器
osgGA::MatrixManipulator类
漫游器也是事件处理器GUIEventHandler的一种。 viewer使用setCameraManipulator()函数来设置一个针对此视景器的漫游器。
8.2.2拖拽器
为要操纵的物体设置一个MatrixTransform父节点,通过改变这个父节点的变换矩阵的内容,进而改变作为操控对象的子节点的表现形式。
osgManipulator库中拖拽器Dragger的实现方式
osgManipulator::Selection类和Dragger类
使用拖拽器实现三维交互动作的整个运作流程:
(1)新建一种新的拖拽器,并指定作为备选对象的节点
(2)将拖拽器和一个或多个备选对象进行绑定,如有必要,也可以与一个或多个约束对象向绑定
(3)当用户执行交互动作时,其信息首先反映到Dragger::handle()中,并生成相应的运动命令。
(4)分发命令dispatch()中简单地执行了这个命令
(5)在接收者的接收函数中,完成拖拽器对备选对象的操控
8.3二维图形用户接口
8.3.1窗口设备
OSG中的图形设备类(GraphicsContext)定义了场景渲染所处的设备平台,他可以是一个图形窗口,也可以是一个离屏渲染设备
GraphicsWindow类是GraphicsContext的派生类,用于表达一个图形窗口;同时也继承了动作适配器GUIActionAdapter的成员函数
8.3.2windows下窗口设备的实现
P234 在普通windows窗口上嵌入osg视景器
第十章 文件的读写机制
10.1数据文件支持机制
10.1.1文件格式概述
(1)模型文件
(2)图像文件 主要作为纹理数据使用
(3)视频文件
(4)字体文件 矢量字体和点阵字体
(5)其他类型数据
10.1.2 osg支持的文件格式
P283
10.1.3 基本文件读写接口
由osgDB负责实现,可读写的文件包括模型、图像、视频,以及字体、文本文档等。
模型数据可以用节点类(node)来表达;图像和视频数据则使用Image对象及其子类进行存储;其他文件由基类Object保存
读取文件得到的模型节点始终是node,
用于保存各种文件读写参数的Options类。
10.2文件读写插件
10.2.1插件的编写和注册
文件读写插件的公共接口是osgDB::ReaderWriter类
职责链模式,由osgDB::Registry类负责
osg中的文件读写过程大致分为两步: 首先使用职责链的机制,从已注册的插件链表中寻找一个也许能够解析当前文件的插件,并返回它得到的节点指针;如果已注册的插件不存在能够读取该文件的插件,则根据文件扩展名自动尝试加载一个同名插件,并返回它解析的结果。
10.2.3 文件的读写回调
osgDB定义了四种文件回调:P295