osg坐标经过矩阵缩放后的影响

今天碰到一个很鬼畜的问题:
在osgEarth上通过经纬度选取两个点,转为世界坐标后求差得到出发点指向目的点的相对位置向量,将该位置向量作为出发点子节点的translate参数进行一个简单的回调动画,得到的结果与预期大相径庭。
如下图:
在这里插入图片描述
得到的结果是模型飞到天边去了,位置相差巨大。经检查坐标转换函数没有问题,最后发现是矩阵缩放的
osg::Matrix::scale方法惹的祸,因为模型不符合预期大小,于是双双进行了放大100倍的操作,然后模型本身的坐标系尺度也被相应放大了,如下图:
在这里插入图片描述
进行了缩放操作以后,模型的坐标轴尺度也被同比放大了,假设原来出发点是(10,0,0),目标点是(40,0,0),本来得到的有向向量是(30,0,0),就是沿着x轴正方向,从出发点指向目的点的向量,结果缩放后变成了(1000,0,0)和(4000,0,0),这样看起来两个模型的相对位置是没有区别的,都是在同尺度的1和4的位置,但是在世界坐标下他们之间的向量是(3000,0,0),这时候再用目标点向量减去出发点向量就会得到一个远超预期的向量。

解决方法:
1.得到作差的结果后手动恢复缩放比例,模型放大了100倍,得到的结果就/100;模型缩小了200倍,得到的模型就*200(两个模型缩放比例相同的情况下
2.两个模型比例不同的情况下,可以设置参考帧setReferenceFrame,强制他们使用世界坐标。

感谢观看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值