查看: 1546|回复: 7

求助:请问该如何切换视角呢?(详细情况见下文,实在找不出办法了,大家帮帮忙啊)

[复制链接]

该用户从未签到

发表于 2013-10-21 23:28:26 | 显示全部楼层 |阅读模式
本帖最后由 天行剑 于 2013-11-6 15:53 编辑

一直用这个模式来实现场景切换:
        // 添加跟随模型的矩阵控制器的。按下对应键即可实现视口切换到该控制器。
        ksmm->addMatrixManipulator('1', "carFollower", followCar);(第一人称跟踪视角)
        ksmm->addMatrixManipulator('2', "cameraFollower", followCamera);
        ksmm->addMatrixManipulator( '3', "Trackball", new osgGA::TrackballManipulator );
                 ……
  osgViewer::Viewer viewer;
  viewer.setCameraManipulator(ksmm);
现在新增了一个场景,借用了Array大神在CookBook中follow_model.cpp的一段代码,最后实现场景的代码为:
  osgViewer::Viewer viewer;
    viewer.addEventHandler( new FollowUpdater(model) );(第三人称跟踪视角)
这样两段代码写好后的确可以在程序中运行第一人称视角(把第三人称跟踪视角注掉即可)或第三人称跟踪视角(把第一人称跟踪视角注掉即可)。
问题是,如何同时保留第一人称跟踪视角和第三人称跟踪视角,且通过按键就能实现视角的切换呢?

该用户从未签到

发表于 2013-10-22 08:18:33 | 显示全部楼层
这个叫切换场景??  只能算是视点变换吧 , 按下4  也是在EventHandler中 处理 判断有这个按键按下,然后更新view对应camera的 viewposition 不就可以了么。

该用户从未签到

 楼主| 发表于 2013-11-6 07:46:41 | 显示全部楼层
liuzhiyu123 发表于 2013-10-22 08:18
这个叫切换场景??  只能算是视点变换吧 , 按下4  也是在EventHandler中 处理 判断有这个按键按下,然后更 ...

怎么可以呢?按键对应的是
viewer.setCameraManipulator(ksmm);
而跟踪视点对应的是
viewer.EventHandler(new FollowUpdater(modelXform);
所以这么做不行吧

该用户从未签到

发表于 2013-11-6 11:18:22 | 显示全部楼层
ksmm->getCurrentMatrixManipulator()->setbyMatrix(mat);

该用户从未签到

 楼主| 发表于 2013-11-6 15:51:26 | 显示全部楼层
smash 发表于 2013-11-6 11:18
ksmm->getCurrentMatrixManipulator()->setbyMatrix(mat);

这个有什么作用呢?最后mat是一个什么矩阵呢?

该用户从未签到

发表于 2013-11-18 11:09:21 | 显示全部楼层
setByMatrix设置的是相机的位置姿态矩阵,setByInverseMatrix设置的是观察矩阵

该用户从未签到

 楼主| 发表于 2013-11-18 13:01:45 | 显示全部楼层
array 发表于 2013-11-18 11:09
setByMatrix设置的是相机的位置姿态矩阵,setByInverseMatrix设置的是观察矩阵

是啊 可是如何在程序中实现一键切换功能呢?

该用户从未签到

发表于 2013-12-2 09:30:06 | 显示全部楼层
把前一个manipulator的getMatrix直接用setByMatrix设置给下一个manipulator。可以直接参看KeySwitchManipulator的源代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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