查看: 1199|回复: 4

TerrainManipulator

[复制链接]

该用户从未签到

发表于 2010-7-15 09:14:32 | 显示全部楼层 |阅读模式
trackboll控制器和Terrain控制器在相互切换时,视点为什么会发生变化,有什么方法使得在切换过程中不发生变化?

该用户从未签到

发表于 2010-7-15 09:28:02 | 显示全部楼层
在转化过程中把上一个控制器的camera的Matrix提取出来,给下一个控制器。通过getMatrix()和setByMatrix(const osg::Matrixd& matrix)应当可以实现

该用户从未签到

 楼主| 发表于 2010-7-15 09:42:27 | 显示全部楼层
但是在KeySwitchMatrixManipulator的handle函数不是已经实现了这个过程吗?

该用户从未签到

 楼主| 发表于 2010-7-15 09:43:47 | 显示全部楼层
在Terrain控制器切换到Trackboll控制器视点是没有 变化的,但是反过来不行

该用户从未签到

 楼主| 发表于 2010-7-15 10:33:11 | 显示全部楼层
bool KeySwitchManipulatorExt::handle(const GUIEventAdapter& ea,GUIActionAdapter& us)
{

        bool resu=false;


       
        if (!ea.getHandled()&&ea.getEventType()==GUIEventAdapter:EFT_MOUSE_BUTTON||ea.getEventType()==GUIEventAdapter::MOVE)
        {
                std::string str=getCurrentMatrixManipulator()->className();
                if ("Trackball"==str)
                {
                        mm=getCurrentMatrixManipulator()->getMatrix();
                }       
          
        }
  resu=KeySwitchMatrixManipulator::handle(ea,us);

  if (ea.getEventType()==GUIEventAdapter::KEYDOWN)
  {
    std::string str1=getCurrentMatrixManipulator()->className();
        if ("Terrain"==str1)
        {
                osg::Vec3f eye,center,up;
                mm.getLookAt(eye,center,up);
                getCurrentMatrixManipulator()->setHomePosition(eye,center,up);
       
               
        }
  }
return resu;
}

这个是重写keyswitchmatrixmanipulator的handle函数,不知道哪里有问题,在trackball切换到Terrain后设置控制器位置好像没有反应
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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