查看: 2423|回复: 7

关于漫游器操作的问题

[复制链接]

该用户从未签到

发表于 2012-8-9 16:54:19 | 显示全部楼层 |阅读模式
本帖最后由 buaahc 于 2012-8-18 13:29 编辑

自己写了一个,差不多完成了osgearth的漫游器功能的全部,
我的接口代码是
osg::Matrixd SceneManipulator::getInverseMatrix() const
{
        return osg::Matrixd::inverse(Matrix_Rotation*Matrix_Translate*osg::Matrix::translate(FocusPoint) );
}
场景漫游器主要通过Matrix_Rotation,Matrix_Translate和osg::Matrix::translate(FocusPoint)进行操作,漫游器实现了上下左右旋转,相机前后拉近或远离以及trackballmanipulator的中键按下拖拽至某一点的功能
但是就是osgearth漫游器的中键按拖拽的功能没有实现,
无标题1.png

无标题2.png

就是这个功能:
原先地球在场景中心,按下中键后进行拖拽,地球可以绕着中键按下的点在场景中的拖拽,这个意思不好表达。。。我觉得各位都玩过osgEarth也就不多描述这个功能了。。。


希望各位能给个思路,我自己有一个思路就是:中键按下进行拖拽时,相机应该始终环绕中键按下时的那个点进行旋转,当中键释放时,再按照原先的旋转或移动进行操作,但是这样的话,怎样将中键按下时操作的矩阵变换 传递给Matrix_Rotation,Matrix_Translate和osg::Matrix::translate(FocusPoint),矩阵变换的传递就是解决问题的关键!

感觉自己在漫游器方面有一点小基础。。。本想把osgearth漫游器的所有功能写出来,然后共享给大家,没想到在这里卡壳了,惭愧,还烦请大家共同解决最后一个问题,
谢谢~

该用户从未签到

 楼主| 发表于 2012-8-10 00:19:44 | 显示全部楼层
怎么没人回答呀 array freesouth等大神 都哪去了~
等待高手的答复呀~

该用户从未签到

发表于 2012-8-10 00:38:47 | 显示全部楼层
把osgEarth的漫游器代码抄过来不就行了吗  费这个劲干嘛啊
想自己理解,仔细阅读下osgEarth的漫游器代码也行啊

该用户从未签到

发表于 2012-8-10 13:05:50 | 显示全部楼层
您的问题貌似是throw的问题?Trackball等漫游器中都有比较完整简单的实现,说白了就是记录这一次和上一次的鼠标位置与时间,然后计算出鼠标速度来决定是否要按这个速度一直惯性运动即可

该用户从未签到

 楼主| 发表于 2012-8-11 02:19:33 | 显示全部楼层
array 发表于 2012-8-10 13:05
您的问题貌似是throw的问题?Trackball等漫游器中都有比较完整简单的实现,说白了就是记录这一次和上一次的 ...

不是的array 您没有看明白我的问题。。。。
trackballmanipulator的所有操作我都自己写完了
包括您说的throw 根据释放时的速度判断是否进行惯性运行,我也都写完了
但是这并不是我说的问题。。。
我的问题是osgearth的中键按下操作 图片 我不是都截了么。。。
3l说的很实在。。。直接copy过来~ 但是我总想自己实现。。。

该用户从未签到

 楼主| 发表于 2012-8-15 00:11:46 | 显示全部楼层
array 发表于 2012-8-10 13:05
您的问题貌似是throw的问题?Trackball等漫游器中都有比较完整简单的实现,说白了就是记录这一次和上一次的 ...

怎么不回复我了 自己顶一个。。。

该用户从未签到

 楼主| 发表于 2012-8-18 13:25:49 | 显示全部楼层
array 发表于 2012-8-10 13:05
您的问题貌似是throw的问题?Trackball等漫游器中都有比较完整简单的实现,说白了就是记录这一次和上一次的 ...

这几天也没上论坛,怎么array大哥你倒是给个回复啊,一个思路就行~
不需要代码

该用户从未签到

发表于 2012-8-21 09:57:03 | 显示全部楼层
您要问的是什么问题?我没有理解。如果是要沿着某个点转动的话,那么只要求交得到这个点然后获得它与球心的连线,作为旋转的轴线即可
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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