查看: 1466|回复: 12

关于视口跟踪模型

[复制链接]

该用户从未签到

发表于 2012-11-21 20:37:43 | 显示全部楼层 |阅读模式
我用下边的代码 实现的视口跟随节点  我想问下 怎么能再切回原来的模式 就是可以第三人称 随意调节视口


if(ea.getKey() == 'm' || ea.getKey() == 'M'){        //切换跟踪模式
    if(track == false){
        osg::ref_ptr<osgGA::NodeTrackerManipulator> tm;
        tm = new osgGA::NodeTrackerManipulator;
        tm->setTrackerMode(osgGA::NodeTrackerManipulator::NODE_CENTER_AND_ROTATION);
        tm->setRotationMode(osgGA::NodeTrackerManipulator::ELEVATION_AZIM);
        tm->setTrackNode(group->getChild(0));
        viewer.setCameraManipulator(tm);
    }else{
        //这里填写切回普通模式的代码  这里应该怎么写啊 大神们。。
    }
}

该用户从未签到

发表于 2012-11-22 01:52:57 | 显示全部楼层
if(ea.getKey() == 'm' || ea.getKey() == 'M'){        //切换跟踪模式
    if(track == false){
        osg::ref_ptr<osgGA::NodeTrackerManipulator> tm;
        tm = new osgGA::NodeTrackerManipulator;
        tm->setTrackerMode(osgGA::NodeTrackerManipulator::NODE_CENTER_AND_ROTATION);
        tm->setRotationMode(osgGA::NodeTrackerManipulator::ELEVATION_AZIM);
        tm->setTrackNode(group->getChild(0));

////////////////////////////
//在这里将默认操作器取出并作为成员变量m_XXX保存
//使用m_XXX = viewer.getCameraManipulator()

/////////////////////////////
viewer.
        viewer.setCameraManipulator(tm);
    }else{

/////////////////////

//用同样的方法将m_XXX选入

该用户从未签到

 楼主| 发表于 2012-11-22 09:57:20 | 显示全部楼层
Hehykissool 发表于 2012-11-22 01:52
if(ea.getKey() == 'm' || ea.getKey() == 'M'){        //切换跟踪模式
    if(track == false){
       ...

这里的m_XXX应该是什么类型的啊?

该用户从未签到

发表于 2012-11-22 11:21:15 | 显示全部楼层
osg::ref_ptr<osgGA::NodeTrackerManipulator>

该用户从未签到

 楼主| 发表于 2012-11-22 11:29:57 | 显示全部楼层
Hehykissool 发表于 2012-11-22 11:21
osg::ref_ptr

不行啊。。
osg::ref_ptr<osgGA::NodeTrackerManipulator> m_tm = new osgGA::NodeTrackerManipulator;
m_tm = viewer.getCameraManipulator();

说没有与这些操作符匹配的“=”  

默认的操作器不是NodeTrackerManipulator类型的吧?

该用户从未签到

发表于 2012-11-22 11:33:44 | 显示全部楼层
那就直接使用CameraManipulator

该用户从未签到

 楼主| 发表于 2012-11-22 11:34:17 | 显示全部楼层
Hehykissool 发表于 2012-11-22 11:33
那就直接使用CameraManipulator

CameraManipulator 是抽象类。。不让实例化吧。。

该用户从未签到

发表于 2012-11-22 11:36:22 | 显示全部楼层
等我翻一下源码

该用户从未签到

 楼主| 发表于 2012-11-22 11:47:11 | 显示全部楼层
Hehykissool 发表于 2012-11-22 11:36
等我翻一下源码

请问您去哪看源码?  我也想看看。。方便以后有什么不会做的 再麻烦别人了。。

该用户从未签到

发表于 2012-11-22 11:47:28 | 显示全部楼层
用CameraManipulator应该没问题吧?并没有实例化CameraManipulator

该用户从未签到

发表于 2012-11-22 11:53:54 | 显示全部楼层
最好使用自己编译的OSG,http://www.openscenegraph.org/projects/osg/wiki/Downloads可以下载到源码,编译方法可以自己搜索,或者http://blog.csdn.net/mygis2005/article/details/8062235

该用户从未签到

 楼主| 发表于 2012-11-22 12:01:04 | 显示全部楼层
Hehykissool 发表于 2012-11-22 11:47
用CameraManipulator应该没问题吧?并没有实例化CameraManipulator

太感谢了!
osg::ref_ptr<osgGA::CameraManipulator> m_camera = new osgGA::NodeTrackerManipulator;
这样写就没问题了  
现在确实能切换了 但是切回去之后 中键拖动功能不能用了。。这是什么情况? 是要改下setTrackerMode么?

该用户从未签到

 楼主| 发表于 2012-11-22 13:07:07 | 显示全部楼层
Hehykissool 发表于 2012-11-22 11:53
最好使用自己编译的OSG,http://www.openscenegraph.org/projects/osg/wiki/Downloads可以下载到源码,编译 ...

好的  非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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