查看: 1546|回复: 7

请问关于切换视点的一些问题

[复制链接]

该用户从未签到

发表于 2009-10-9 15:26:53 | 显示全部楼层 |阅读模式
本人这里用KeySwitchMatrixManipulator来切换几个矩阵控制器,其中用自己派生的矩阵控制器,也有Trackball等。现在在按键切换的时候,就是从自定义的矩阵控制器切换到Trackball控制器的时候,视点位置不太对,必须按一下空格才能回到初始的视点位置。这里是什么问题?需要自己重载什么函数么?谢谢了~

该用户从未签到

发表于 2009-10-9 15:50:46 | 显示全部楼层
setByMatrix(),这个函数要重载

该用户从未签到

 楼主| 发表于 2009-10-9 15:59:04 | 显示全部楼层
setByMatrix(),这个函数要重载
array 发表于 2009-10-9 15:50


您说是要派生一个KeySwitchMatrixManipulator的子类,重载这里的setByMatrix()么?那么这个类其他的函数哪些需要重载呢?有点晕。。

该用户从未签到

发表于 2009-10-9 16:30:04 | 显示全部楼层
不是这样的。是您自己写的漫游器要重载这个函数,因为KeySwitchMatrixManipulator在切换各个子漫游器时会自动调用子漫游器的setByMatrix,将当前观察矩阵传进去。

对于子漫游器而言,最重要的重载函数是getMatrix和getInverseMatrix,系统使用这两个函数读取当前漫游的位置和姿态信息

该用户从未签到

 楼主| 发表于 2009-10-9 22:38:36 | 显示全部楼层
恩。。。您的意思是要自己派生一个TrackBall的漫游器么?然后去重载它的setByMatrix函数,其中传入最初默认的视点位置么?不知这样理解是否正确?
这里如果自己派生一个TrackBall漫游器的子类,重载其中的setByMatrix函数的话,会不会影响原本系统提供的TrackBall漫游器的功能呢?
麻烦array老师了~~:loveliness:

该用户从未签到

发表于 2009-10-9 23:06:09 | 显示全部楼层
您的原文里说,“自己派生的矩阵控制器”,那么就派生这个类的函数,和其它的无关,也绝不会影响到其它漫游器。

该用户从未签到

 楼主| 发表于 2009-10-9 23:24:31 | 显示全部楼层
这里我就有些不太明白了。。
现在我用了2个漫游器,一个是系统提供的轨迹球,另外一个是自定义的,绑定在场景中某个节点的一个视点的漫游器(从海军教程中学到的那个~),目前是从一开始默认的轨迹球切换到上述的自定义的那个漫游器,视点位置是没有问题,可是如果从自定义的漫游器,切换回到轨迹球漫游器,那么视点的位置并不是一开始的默认位置,此时按我的理解,是否是轨迹球漫游器的setByMatrix函数所传入的视点位置矩阵不正确呢?这里与我自定义的漫游器类的setByMatrix函数应该是没有关系了吧?~

不知array老师能否理解我的意思。。麻烦了~

该用户从未签到

发表于 2009-10-10 08:40:22 | 显示全部楼层
我知道您的意思了,之前没注意(说实话也很难立即注意到您话里的重点,因为我不是您肚里的虫~~)。

当然有可能是轨迹球漫游器的setByMatrix没有正确解析观察矩阵,这个很正常——因为从 观察矩阵 直接反求 距离和旋转参数 是无法得到正确结果的!必须追加一个已知参数:对于TrackballManipulator来说,需要手动设置setDistance(),也就是视点和观察点的距离。很遗憾这一步不能在KeySwitchMatrixManipulator中完成

那么,为什么默认的漫游器之间切换没有问题呢,答案是我也不清楚,因为我没有深入看过它们的实现过程,我只是根据源代码来说话。您有兴趣的话不妨深入研究一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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