玩了一个暑假。。。要好好学习了。。
想要实现一个通过鼠标来单击选择一些物体的功能,先来试一试书上的例子吧。
学习一下OSG对事件的处理
OSG中主要使用osgGA库来处理用户的交互动作。
GUIEventHandler提供了可供扩展的虚函数handle()。通过类的派生和虚函数的重构,即能实现用户自定义的交互事件处理工具。
virtual bool handle(const GUIEventAdapter& ea,GUIActionAdapter& aa, osg::Object*, osg::NodeVisitor*) { return handle(ea,aa); }
事件处理函数,重构此函数以完成用户自定义的交互操作。
传入的参数:
事件适配器ea表示当前传入次处理器的事件
动作适配器aa是一个可以获取也可以修改的参数,大部分时候,这个传入值表示当前所用的视图对象View,可以用它来获取或控制视景器的状态变化。
保存该处理器的对象以及传递该事件的访问器EventVisitor
1、创建一个点选事件处理类
这个类从GUIEventHandler公有派生来。
- 实现handle函数,该函数在每帧的事件遍历时会调用。
- 响应PUSH事件,即响应单击事件 case(osgGA::GUIEventAdapter::PUSH):
- 如果是左单击事件,则将坐标输入到Pick函数中进行处理。Pick(e