查看: 1713|回复: 3

大坐标模型抖动问题 解决办法分享

[复制链接]

该用户从未签到

发表于 2014-7-24 12:55:47 | 显示全部楼层 |阅读模式
    问题帖子为“大坐标模型抖动问题”,经过向论坛发帖询问,终于把抖动问题解决了,这里我简单总结分享一下。
    在我看来抖动原因主要可能有以下几点:
        1、更新摄像机viewmatrix顺序
        2、float精度问题
        3、数据源问题
        4、数据是否每帧有数据
  解决办法:
        1、首先针对 跟踪摄像机 的viewMatrix,要在我们更新 跟踪节点 位置状态之后在计算更新,否则你先计算了viewMatrix,但是你的viewMatrix的位置是上一次更新 跟踪节点 的相关位置,当前帧 跟踪节点 位置已经变化,这样看起来就是抖动的方向在模型前进方向前后来回抖动。这里更新 跟踪节点 的位置时,你最好使用updataCallback更新,如果是EventHandler中更新,那么也会有抖动,因为EventHandler是不稳定的,你操作键盘鼠标多了在同一帧就会多次更新EventHandler。
        2、float精度不够,就是用多个MatrixTransform级联,比如10个MatrixTransform,  ScenceRoot->MatrixTransform[0]->MatrixTransform[1]->.....->MatrixTransform[9]->modelMatrixTransform,这样的话如果你的坐标位置是pos=(-1321996.5812316998,5336824.9109224305,3223085.4500543983),那你可以把MatrixTransform[0-9]->setMatrix(osg::Matrix::translate(pos/10.0)),只在最后一个modelMatrixTransform设置你这个模型的各种旋转即可,这样就解决了多个MatrixTransform分担精度的问题。
        3、对于数据源的问题,我们可以程序内部或者外部不断产生一个单方向自增的数据,然后设置到模型位置,看是否抖动,如果抖动就是你前面1和2可能没合适,如果不抖动那么你再把仿真数据替换上,看是不是仿真数据本身就是抖动的,如果仿真数据自身就抖动那么让相关人员修改吧。
        4、到达这个问题基本上你的抖动已经不是抖动了,而是数据可能每隔100毫秒或者更加长的时间才有一次更新,那么看起来就是一卡一卡的,解决办法是修改数据产生的时间间隔步长,或者就是自己接收到数据后做插值。
    我能遇到的和能想到的就这么多了,希望对后面遇到相关问题的人能够有所帮助,同时如果哪里有错误希望大家指出。
       

该用户从未签到

发表于 2014-7-29 09:19:55 | 显示全部楼层
请问您跟踪模型的相机是怎么做的?

该用户从未签到

发表于 2014-10-24 10:47:35 | 显示全部楼层
你好,我也遇到大坐标数据的抖动问题。请问下你的矩阵级联是如何做的?
谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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