查看: 3463|回复: 5

关于Manipulator的问题

[复制链接]

该用户从未签到

发表于 2009-3-9 14:09:14 | 显示全部楼层 |阅读模式
  1.         case(GUIEventAdapter::PUSH):
  2.         {
  3.             flushMouseEventStack();
  4.             addMouseEvent(ea);
  5.             if (calcMovement()) us.requestRedraw();
  6.             us.requestContinuousUpdate(false);
  7.             _thrown = false;
  8.             return true;
  9.         }

  10.         case(GUIEventAdapter::RELEASE):
  11.         {
  12.             if (ea.getButtonMask()==0)
  13.             {
  14.             
  15.                 double timeSinceLastRecordEvent = _ga_t0.valid() ? (ea.getTime() - _ga_t0->getTime()) : DBL_MAX;
  16.                 if (timeSinceLastRecordEvent>0.02) flushMouseEventStack();

  17.                 if (isMouseMoving())
  18.                 {
  19.                     if (calcMovement())
  20.                     {
  21.                         us.requestRedraw();
  22.                         us.requestContinuousUpdate(true);
  23.                         _thrown = true;
  24.                     }
  25.                 }
  26.                 else
  27.                 {
  28.                     flushMouseEventStack();
  29.                     addMouseEvent(ea);
  30.                     if (calcMovement()) us.requestRedraw();
  31.                     us.requestContinuousUpdate(false);
  32.                     _thrown = false;
  33.                 }

  34.             }
  35.             else
  36.             {
  37.                 flushMouseEventStack();
  38.                 addMouseEvent(ea);
  39.                 if (calcMovement()) us.requestRedraw();
  40.                 us.requestContinuousUpdate(false);
  41.                 _thrown = false;
  42.             }
  43.             return true;
  44.         }

  45.         case(GUIEventAdapter::DRAG):
  46.         {
  47.             addMouseEvent(ea);
  48.             if (calcMovement()) us.requestRedraw();
  49.             us.requestContinuousUpdate(false);
  50.             _thrown = false;
  51.             return true;
  52.         }
复制代码
这个是怎么完成的相机移动位置呢?
高手帮忙看看

该用户从未签到

发表于 2009-3-9 14:29:54 | 显示全部楼层
您原样复制了TrackballManipulator中的一部分代码吧?您希望了解什么信息?
这里的相机的即时位置是通过calcMovement函数计算得到的,然后通过getViewMatrix函数从漫游器传递给场景,当然这些都不需要用户程序的参与

该用户从未签到

 楼主| 发表于 2009-3-9 14:35:43 | 显示全部楼层
没错 一个字母都没改

该用户从未签到

 楼主| 发表于 2009-3-9 14:37:09 | 显示全部楼层
我想知道这个manipulator类是如何和场景进行交互的 ,或者说是如何实时的改变相机位置的

该用户从未签到

发表于 2009-3-9 14:46:06 | 显示全部楼层
如我的上一个回贴所说,漫游器控制摄像机的主要方式是getViewMatrix和getInverseViewMatrix方法,它们会自动被viewer类的内部调用,以设置场景主摄像机的观察矩阵。
handle方法是提供给用户使用鼠标键盘等设备进行交互的接口,您完全可以在其中什么都不做,也可以事先计算好摄像机矩阵的位置,等待传递。

该用户从未签到

 楼主| 发表于 2009-3-9 14:49:43 | 显示全部楼层
明白了,那应该是viewer每帧都在调用getMatrix()和getInverseMatrix().谢谢array
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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