查看: 1823|回复: 15

大坐标模型抖动问题

[复制链接]

该用户从未签到

发表于 2014-7-9 15:21:43 | 显示全部楼层 |阅读模式
本帖最后由 lcqlcl 于 2014-7-9 15:39 编辑

问题如下:
            飞机Aircraft通过经纬高,转换后的vec3d position 坐标(-1321996.5812316998,5336824.9109224305,3223085.4500543983),这个数据很大,看了论坛说直接设置到MatrixTransform会抖动,要多加几个MatrixTransform才能避免,因此我用了10个MatrixTransform来设置,一级一级的addChild,

scenctRoot->addChild(MatrixTransform[0]),
MatrixTransform[0]),->addChild(MatrixTransform[1]),
......
MatrixTransform[9]),->addChild(MatrixTransform[Aircraft_body]);

然后使用setMatrix是MatrixTransform[0~9]->setMatrix(osg :: Matrix :: translate(pos/10.0));
最后在MatrixTransform[Aircraft_body])中设置的是飞机的旋转,
现在网络端数据接收到后,不停地更新数据,加了一个从飞机后上方跟踪飞机的camera,发现飞机收到数据后抖动特别厉害,

问题图

问题图


我想问问防抖动用矩阵级联是这样操作的吗?哪里没对呢?

该用户从未签到

发表于 2014-7-12 10:34:08 | 显示全部楼层
我也遇到过这个问题,不过我是把地形模型原点移到附近来避免这个问题的。可能你必须用大坐标

该用户从未签到

发表于 2014-7-14 13:49:08 | 显示全部楼层
这是经典的截断误差的问题,同楼上所说,如果可以的话把模型尽量放到原点附近,如果必须要使用当前的坐标系,在计算时先移到原点附近,计算完后再移回来。

该用户从未签到

 楼主| 发表于 2014-7-14 16:58:10 | 显示全部楼层
不好意思,我还是不太明白,“在计算时先移到原点附近,计算完后再移回来”,是我在计算更新飞机位置前线setMatix()到0,0,0点,计算完了再移动回计算得到的位置?
我这个更新在一个函数里啊,难道就是
update()
{
  MatrixTransform->setMatrix(0,0,0);
..........计算新的位置.....
MatrixTransform->setMatrix(新的位置);
}
这样吗?
能不能有个伪代码学习一下?我还是不太明白

该用户从未签到

发表于 2014-7-14 19:07:06 | 显示全部楼层
我遇到的是跟踪器的问题,跟踪计算如果用浮点数,那就会出现这个问题

该用户从未签到

发表于 2014-7-14 22:11:20 | 显示全部楼层
我看你的图,更像是相机的问题。

该用户从未签到

发表于 2014-7-15 08:32:09 | 显示全部楼层
lcqlcl 发表于 2014-7-14 16:58
不好意思,我还是不太明白,“在计算时先移到原点附近,计算完后再移回来”,是我在计算更新飞机位置前线se ...

比方说模型当前位置在(10000,20000,0),那就先偏移(-10000,-20000,0),让模型移动到原点附近,计算完后在移动(10000,20000,0),回到原来的位置。

该用户从未签到

 楼主| 发表于 2014-7-22 15:24:53 | 显示全部楼层
smash 发表于 2014-7-15 08:32
比方说模型当前位置在(10000,20000,0),那就先偏移(-10000,-20000,0),让模型移动到原点附近,计算完 ...

还是不会操作.....

该用户从未签到

 楼主| 发表于 2014-7-22 16:05:03 | 显示全部楼层
lcqlcl 发表于 2014-7-22 15:24
还是不会操作.....

难道就是
update()
{
   MatrixTransform->setMatrix(0,0,0);
..........计算新的位置.....
MatrixTransform->setMatrix(新的位置);
}
这样吗?

该用户从未签到

 楼主| 发表于 2014-7-22 17:12:01 | 显示全部楼层
我现在不通过网络数据,直接在经纬度上每次偏移经度0.00001,然后转换为vec3d的坐标设置到matrixtransform上它就不抖动呢,同样的我通过网络端把同样的初始经纬度每次偏移经度0.00001,发送过来,然后转换为vec3d的坐标设置到matrixtransform上就要抖动呢,这是什么原因呢?

该用户从未签到

 楼主| 发表于 2014-7-23 09:11:01 | 显示全部楼层
昨天终于解决了。。。

该用户从未签到

 楼主| 发表于 2014-7-23 09:12:02 | 显示全部楼层
谢谢楼上的 smash ,csutest, fenma3422 了!:D

该用户从未签到

发表于 2014-7-23 10:30:53 | 显示全部楼层
lcqlcl 发表于 2014-7-23 09:11
昨天终于解决了。。。

能不能把解决方法描述一下,万一将来有其他人遇到相似的问题也好解决。分享快乐

该用户从未签到

发表于 2014-7-24 09:26:59 | 显示全部楼层
解决了 把解决办法也一并提供了多好

该用户从未签到

 楼主| 发表于 2014-7-24 12:24:54 | 显示全部楼层
我重新发个帖子说一下

该用户从未签到

发表于 2015-8-17 22:47:27 | 显示全部楼层
voovoo 发表于 2014-7-12 10:34
我也遇到过这个问题,不过我是把地形模型原点移到附近来避免这个问题的。可能你必须用大坐标

从远处移动到原点附近  用一级martixtransform以为是不行的   模型都会消失。。。晕  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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