查看: 1922|回复: 7

模型抖动问题

[复制链接]

该用户从未签到

发表于 2013-2-22 08:38:37 | 显示全部楼层 |阅读模式
最近在读取模型文件的时候,发现了一个问题,在浏览模型的时候,顶点是抖动的。例如
(454.287, 3956.2, 0)、( 454.292, 3956.2, 0)、( 454.296, 3956.19, 0)三个点构成的三角形,在旋转模型的时候会抖动,是数据的原因吗???各位可以用osgViewer.exe浏览一下我附件里的a.osg文件,a.osg里面的内容如下:

Group {
  nodeMask 0xffffffff
  cullingActive TRUE
  num_children 1
  Group {
    name "*MODEL_SPACE"
    nodeMask 0xffffffff
    cullingActive TRUE
    num_children 1
    Geode {
      name "AcDb2dPolyline"
      nodeMask 0xffffffff
      cullingActive TRUE
      num_drawables 1
      Geometry {
        useDisplayList TRUE
        useVertexBufferObjects FALSE
        PrimitiveSets 1
        {
          DrawArrays TRIANGLES 0 3
        }
        VertexArray Vec3Array 3
        {
          454.287 3956.2 0
          454.292 3956.2 0
          454.296 3956.19 0
        }
      }
    }
  }
}

a.osg

628 Bytes, 下载次数: 7, 下载积分: 威望 1

该用户从未签到

发表于 2013-2-22 09:27:18 | 显示全部楼层
顶点精度问题,可在geode上,加矩阵解决
类似。。。
MatrixTransform {
    UniqueID MatrixTransform_0
    nodeMask 0xffffffff
    cullingActive TRUE
    referenceFrame RELATIVE
    Matrix {
      1 0 0 0
      0 1 0 0
      0 0 1 0
      454 3956 0 1
    }
    num_children 1
  Group {
    name "*MODEL_SPACE"
    nodeMask 0xffffffff
    cullingActive TRUE
    num_children 1
    Geode {
      name "AcDb2dPolyline"
      nodeMask 0xffffffff
      cullingActive TRUE
      num_drawables 1
      Geometry {
        useDisplayList TRUE
        useVertexBufferObjects FALSE
        PrimitiveSets 1
        {
          DrawArrays LINE_STRIP 0 3
        }
        VertexArray Vec3Array 3
        {
          0.287 0.2 0
          0.292 0.2 0
          0.296 0.1 0
        }
      }
。。。

该用户从未签到

 楼主| 发表于 2013-2-22 09:54:06 | 显示全部楼层
gis_wudi 发表于 2013-2-22 09:27
顶点精度问题,可在geode上,加矩阵解决
类似。。。
MatrixTransform {

好的,谢谢,我试试

该用户从未签到

发表于 2013-5-31 17:00:19 | 显示全部楼层
wanggang8826 发表于 2013-2-22 09:54
好的,谢谢,我试试

hi ,

你好,我也遇到移动场景的时候发生抖动的问题,请问你解决了吗?是怎么解决的呢?能告诉一下吗?

谢谢

该用户从未签到

发表于 2013-5-31 17:08:11 | 显示全部楼层
happytears 发表于 2013-5-31 17:00
hi ,

你好,我也遇到移动场景的时候发生抖动的问题,请问你解决了吗?是怎么解决的呢?能告诉一下吗? ...

亲,gis_wudi的房屋就可以解决

该用户从未签到

发表于 2013-5-31 17:19:22 | 显示全部楼层
Berly 发表于 2013-5-31 17:08
亲,gis_wudi的房屋就可以解决

Hi Berly,

我才开始使用OSG不久,比较菜,能说的具体点吗?谢谢

该用户从未签到

发表于 2013-5-31 17:38:35 | 显示全部楼层
happytears 发表于 2013-5-31 17:19
Hi Berly,

我才开始使用OSG不久,比较菜,能说的具体点吗?谢谢

人家都给你改好了,加个矩阵吧,osg::MatrixTransform *mt = new osg::MatrixTransform;   
mt->addChild( node );
mt->setMatrix(osg::Matrixd::translate(osg::Vec3 position));

该用户从未签到

发表于 2013-5-31 17:54:37 | 显示全部楼层
Berly 发表于 2013-5-31 17:38
人家都给你改好了,加个矩阵吧,osg::MatrixTransform *mt = new osg::MatrixTransform;   
mt->addChil ...

对不起,忘记说了,我的问题是在移动画面的时候画面在上下抖动,感觉camera的高度有发生变化,我的manipulator的移动场景的代码与 TerrainManipulator的一样

  1. double scale = -0.3f * _distance * getThrowScale(aEventTimeDelta);
  2.      osg::Matrixd rotationMatrixd ;
  3.      rotationMatrixd.makeRotate(_rotation);
  4.   
  5.      osg::Vec3d sideVector = getSideVector(rotationMatrixd);
  6.      osg::Vec3d localUp = _previousUp ;
  7.      osg::Vec3d forwardVector = localUp ^ sideVector ;
  8.      sideVector = forwardVector ^ localUp ;

  9.      forwardVector.normalize();
  10.      sideVector.normalize();

  11.      osg::Vec3d deltaVector = forwardVector * (aDeltaY * scale) + sideVector * (aDeltaX * scale);
  12.      _center += deltaVector ;
  13. ......
复制代码

请问这个有解决的办法吗?谢谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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