OSG拖拽器Dragger简介之一
OSG学习经典入门教程,浅显易懂,新手必备!本文基于 osg 2.4,引用了其 example 目录下的 osgManipulator 例子。
知识点一:什么是 Dragger?
Dragger,即拖拽器,可以使得用户通过鼠标交互的方式对场景数据进行操作(如平移、缩放等等)。Dragger 操纵的是数据,这个时候,我们的视点是不会变动的,而 Manipulator 一般是针对场景相机进行的操纵。
知识点二:Dragger 与 Manipulator 的区别
Manipulator 是针对场景相机进行的操纵, Draggeer 操纵的是数据。Manipulator 是不会更改场景数据的,而 Dragger 则可以。通过一个实验可以证明这一点:打开 osg 自带的 example 里的 osgManipulator 例子程序,使用 Manipulator 转动相机,得到右图场景,然后按下空格键,场景变回到了左图,这说明 Manipulator 改变的只是相机的位置与姿态而非场景数据。
知识点三:如何使用 Dragger
使用 Dragger 需要进行以下步骤:
1. 申请一个 osgManipulator::CommandManager 对象,用于链接 dragger 和 selection。
2. 申请并配置相应 dragger 对象以及 selection 对象。
3. 设置 dragger 的大小,使其比要拖拽的场景稍大一点。
4. 将 selection 对象作为我们需要进行拖拽的场景或部分场景的父节点。
5. 再将 dragger 和 selection 分别添加为场景根节点的子结点。
6. 通过 cmdMgr->connect(*dragger, *selection) 将 dragger 和 selection 链接,是的后者可以相应于前者进行变换。
7. 编写 GUIEventHandler 类,在内部重写 handle 函数,将消息传入 dragger,写自己的handler 时可以借鉴 osgManipulator 的例子。
8. 将该 handler 添加至 viewer 的 handler 列表,至此完成了 dragger 和 selection 联合使用的设置。
知识点四:OSG 内置 Dragger
osgManipulator 例子程序中提供了多种 Dragger,例如 TrackballDragger,可以根据需要选择合适的 Dragger。
Dragger 是 OSG 中的一种重要的交互工具,可以使得用户通过鼠标交互的方式对场景数据进行操作。 Draggeer 操纵的是数据,而 Manipulator 是针对场景相机进行的操纵。使用 Dragger 需要进行相应的设置和配置,osgManipulator 例子程序中提供了多种 Dragger,供用户选择。