OSG-修改osg鼠标中轮放大缩小的操作键

相关资料:

https://blog.csdn.net/yang_sen_/article/details/84328233

原文:

EarthManipulator默认的操作是向里滚动,地球远了,向外滚动,地球进了。

我不太习惯这种操作,我个人认为向里滚动,地球近了,向外滚动,地球远了。

查找了一下EarthManipulator的源码,在初始化的时候简单修改一下。

_scroll_sens                    ( 1.0 )
1
将1.0改为-1.0即可。

_scroll_sens                    ( -1.0 )
1
按道理来说,_scroll_sens为1.0是合理的,我们可以使用另外一种方法:
在这里插入图片描述
// zoom with the scroll wheel:
// _settings->bindScroll(ACTION_ZOOM_IN, osgGA::GUIEventAdapter::SCROLL_DOWN);
// _settiong->bindScroll(ACTION_ZOOM_OUT, osgGA::GUIEventAdapter::SCROLL_UP);

// 向里滚动放大视图, 向外滚动缩小视图
   _settings->bindScroll(ACTION_ZOOM_IN, osgGA::GUIEventAdapter::SCROLL_up);
   _settiong->bindScroll(ACTION_ZOOM_OUT, osgGA::GUIEventAdapter::SCROLL_DOWN);
查看源码发现,ACTION_ZOOM_IN配置的是SCROLL_DOWN,ACTION_ZOOM_OUT配置的是SCROLL_UP。
注释的代码是系统原有的。我们将ACTION_ZOOM_IN配置SCROLL_UP,ACTION_ZOOM_OUT配置为SCROLL_DOWN即可。

我的用法是修改了QT提供的osgQOpenGL库

void OSGRenderer::wheelEvent(QWheelEvent* event)
{
    setKeyboardModifiers(event);
    m_osgWinEmb->getEventQueue()->mouseMotion(event->x() * m_windowScale,
                                              event->y() * m_windowScale);
    m_osgWinEmb->getEventQueue()->mouseSceoll(
    event->orientation() == Qt::Vertical ?
    (event->delta() > 0 ? osgGA::GUIEventAdapter::SCROLL_DOWN :  // 修改处
    osgGA::GUIEventAdapter::SCROLL_UP): // 修改处
    (event->delta() > 0 ? osgGA::GUIEventAdapter::SCROLL_LEFT :
    osgGA::GUIEventAdapter::SCROLL_RIGHT));    
}
原文地址:https://www.cnblogs.com/FKdelphi/p/14003617.html