查看: 4896|回复: 16

关于鼠标滚轮的问题

[复制链接]

该用户从未签到

发表于 2008-10-23 15:54:07 | 显示全部楼层 |阅读模式
case (osgGA::GUIEventAdapter ::SCROLL ):
radius+=ea.getScrollingDeltaX();
return false;
事件类型有SCROLL ,SCROLL  DOWN,SCROLL  LEFT,SCROLL  RIGHT,SCROLL  UP等等
getScrollingDeltaX,getScrollingDeltaY
我想某个值变大变小随着滚轮的滚动,应该怎么写?

该用户从未签到

发表于 2008-10-23 17:12:25 | 显示全部楼层
您的意思是什么?取得滚轮滚动的Delta值然后再赋给您的变量,您给出的代码中就是这样做的啊。

该用户从未签到

发表于 2008-10-23 18:25:25 | 显示全部楼层
我觉得应该检测SCROLLUP,,,SCROLLDOWN这个两个事件比较好一点~~~~SCROLLUP增加或者减少,,,滑轮毕竟控制还是比较。。。。。。。。。。。。。。。

该用户从未签到

 楼主| 发表于 2008-10-23 21:01:49 | 显示全部楼层
我试了下
cout<<ea.getScrollingDeltaX()<<endl<<ea.getScrollingDeltaY()<<endl;
结果全是0,怎样才能取得滚轮的滚动的值呢?

该用户从未签到

发表于 2008-10-23 23:15:50 | 显示全部楼层
Oops~~刚才查了一下OSG的GraphicsContextWin32的源代码,看来Win32和Linux下都没有实现setScrollingMotionDelta的功能,所以您取得的数据也就是零了。不过在MacOS下倒是实现了滚轮Delta值的获取。

我不清楚Win32 API是否可以取得鼠标滚轮的Delta值(按说不会不提供这类函数),如果可以的话,我们不妨提交osg-submissions一份新的代码,Robert一定会很高兴

该用户从未签到

发表于 2008-10-23 23:20:53 | 显示全部楼层
楼主有兴趣的话可以尝试改动GraphicsWindowWin32.cpp文件中
  1. ////////////////////
  2. case WM_MOUSEWHEEL :
  3. ////////////////////

  4.             getEventQueue()->mouseScroll(GET_WHEEL_DELTA_WPARAM(wParam)<0 ? osgGA::GUIEventAdapter::SCROLL_DOWN :
  5.                                                                             osgGA::GUIEventAdapter::SCROLL_UP,
  6.                                          eventTime);
  7.             break;
复制代码
的段落,在break之前添加一句:
  1. getEventQueue()->mouseScroll2D( 0, (float)wParam );
复制代码
并重新编译OSG。如果有效果的话,希望您能直接向osg-users或者osg-submisstions提交改动后的文件(注意要在最新的SVN版本上改动),帮助OSG完善和发展。您的大名有可能被记载到OSG的贡献者名单中~~

[ 本帖最后由 array 于 2008-10-23 23:23 编辑 ]

该用户从未签到

发表于 2008-10-24 02:43:42 | 显示全部楼层
SCROLLUP,,,SCROLLDOWN这个两个事件的检测还是有的,,,直接检测这两个事件也可以的~~~~~~

该用户从未签到

 楼主| 发表于 2008-10-24 15:17:52 | 显示全部楼层
SCROLL_DOWN的值是4,和DOUBLECLICK一样,经过试验确实是这样,滚轮的滚动没有响应,双击有响应
SCROLL_LEFT和单击一个效果
SCROLLUP没反应
上面array说的那个什么就算啦,我是菜鸟……

该用户从未签到

发表于 2009-9-3 21:43:06 | 显示全部楼层
请问这个问题在osg2.8版中解决没有?

该用户从未签到

发表于 2009-9-3 22:46:29 | 显示全部楼层
已经解决了

该用户从未签到

发表于 2009-9-3 23:09:28 | 显示全部楼层
谢谢!正好用得上!

该用户从未签到

发表于 2009-9-4 21:18:39 | 显示全部楼层
本帖最后由 口口广大 于 2009-9-4 21:21 编辑

试过了2.8,2.8.2,好像SCROLLUP,,,SCROLLDOWN这两个事件仍然无效!SCROLL缺有效!大家难道都不用鼠标滚轮的吗?

该用户从未签到

发表于 2009-9-4 21:26:10 | 显示全部楼层
SCROLL_DOWN和SCROLL_UP都是有效的,我想是您自己的代码编写有误。

该用户从未签到

发表于 2009-9-4 23:27:53 | 显示全部楼层
本帖最后由 口口广大 于 2009-9-4 23:29 编辑
楼主有兴趣的话可以尝试改动GraphicsWindowWin32.cpp文件中////////////////////
case WM_MOUSEWHEEL :
////////////////////

            getEventQueue()->mouseScroll(GET_WHEEL_DELTA_WPARAM(wParam)mouseS ...
array 发表于 2008-10-23 23:20


但是在2.8和2.82仍然是break之前没加语句的这段代码

我是直接这么用的

case (osgGA::GUIEventAdapter ::SCROLL_UP ):
{
   
   打印语句;

}

无反应。

如果是
case (osgGA::GUIEventAdapter ::SCROLL ):
{
   
   打印语句;

}

有反应

该用户从未签到

发表于 2009-9-5 00:12:23 | 显示全部楼层
getEventType()取得的是GUIEventAdapter::SCROLL
而getScrollingMotion()取得的是SCROLL_UP或SCROLL_DOWN。您显然是搞混了

该用户从未签到

发表于 2009-9-5 13:39:18 | 显示全部楼层
谢谢!

该用户从未签到

发表于 2012-10-12 17:43:57 | 显示全部楼层
case(osgGA::GUIEventAdapter::SCROLL):
{
        if (ea.getScrollingMotion()==osgGA::GUIEventAdapter::SCROLL_UP)
        {
        }
        else if (ea.getScrollingMotion()==osgGA::GUIEventAdapter::SCROLL_DOWN)
        {
        }
}
这样够直观了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表