查看: 854|回复: 4

关于dragger 拖动旋转后,似乎有偏差

[复制链接]

该用户从未签到

发表于 2015-7-6 22:18:28 | 显示全部楼层 |阅读模式
本帖最后由 nononono 于 2015-7-6 22:20 编辑

是这样的,我让trackballdragger加载在模型上,然后旋转,转玩之后切换其他类型的dragger,发现都是偏的。转回最初的姿态时,所有dragger又是正的了。具体意思可以看附件。请大神来大概提供一个问题可能的位置,怎么想都不明白,按道理dragger应该自动和模型一起变换啊。

初始状态

初始状态

旋转拖曳器

旋转拖曳器

旋转

旋转

切换后 歪了

切换后 歪了

该用户从未签到

发表于 2015-7-8 17:41:38 | 显示全部楼层
这样是对的啊,你dragger和目标对象都放到transform对象下面了,然后一起旋转和拖动

你要怎么样的效果

该用户从未签到

 楼主| 发表于 2015-8-11 14:52:45 | 显示全部楼层
yoogera 发表于 2015-7-8 17:41
这样是对的啊,你dragger和目标对象都放到transform对象下面了,然后一起旋转和拖动

你要怎么样的效果

用旋转dragger改变旋转角度后再切换回平移dragger,平移dragger的向上的轴没有完全跟着一起旋转,应该仍然垂直于钉子的上表面才对吧。
旋转后的坐标矩阵传给平移dragger,作为平移dragger的父节点,应该是一起旋转才对啊,为什么会出现这种,虽然跟着旋转了,但是没有转到位的情况?

该用户从未签到

发表于 2015-8-17 10:04:45 | 显示全部楼层
是的,你再检查一下吧,这个没有看代码我们说不准

该用户从未签到

 楼主| 发表于 2015-8-28 00:54:27 | 显示全部楼层
解决了,是因为矩阵分解的问题。
osg reference上有段话
Quat osg::Matrixf::getRotate        (                )        const
Get the matrix rotation as a Quat.

Note that this function assumes a non-scaled matrix and will return incorrect results for scaled matrixces. Consider decompose() instead.

我在代码中有一段,是通过getRotate取得旋转矩阵,作一定处理后,再把scale、trans、rotate三个乘起来,由于做过scale操作,所以再次取用rotate时旋转角度就不准了。
使用decompose()方法即刻解决问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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