查看: 1224|回复: 4

关于地理坐标引起的模型抖动问题

[复制链接]

该用户从未签到

发表于 2014-5-3 22:12:07 | 显示全部楼层 |阅读模式
最近在试着用osg加载一些建筑物,由于这些建筑物的空间坐标用的都是地理坐标(数值很大的那一种),所以在模型移动的时候总是会出现抖动的现象。上网搜索了很久才得知这是因为模型的坐标数值过大,在实际绘制的时候会引起精度损失。
网上的解决方案是用建立一个局部坐标系统,把建筑物的坐标全部都归一化到这个坐标系统里面。

请问"局部坐标系统"在OSG里面的实现思路是怎样的?



还有一个问题是关于osg 源码里面
Transform的成员函数 "ComputeWorldToLocalMatrix(osg::Matrix&,NodeVisitor*)" 和 "ComputeLocalToWorldMatrix(osg::Matrix&,NodeVisitor*)",这两个函数究竟在什么时候会被调用,又是被谁调用?
在Array 大神的《最长的一帧》也没有提到这两个函数的作用,而osg 示例程序里面关于天空盒的部分正好重写了这两个函数,我正试着给自己的模型加上天空盒并且遇到了很多问题,现在迫切地想要知道这两个函数到底干什么用的。

该用户从未签到

发表于 2014-5-4 16:34:40 | 显示全部楼层
我以前做卫星仿真,轨道数据也是数据很大,抖动,我使用的是级联矩阵,放大到真实那么大
vec3 v=13213313131.31321;
可以vec3 v1 = 132.1331313131321
v1*m1*m2*m3......放大到v

Transform的成员函数 "ComputeWorldToLocalMatrix(osg::Matrix&,NodeVisitor*)" 和 "ComputeLocalToWorldMatrix(osg::Matrix&,NodeVisitor*)",在内部拣选CullVisitor::apply(osg::Transform& node)的时候被调用。

该用户从未签到

发表于 2014-5-4 16:36:48 | 显示全部楼层
ComputeWorldToLocalMatrix()的意思就是把当前矩阵节点包含的矩阵级联到路径节点的总体矩阵当中
ComputeLocalToWorldMatrix()是他的逆。

该用户从未签到

发表于 2014-5-5 00:02:38 | 显示全部楼层
避免抖动,最简单的方式是用多个MatrixTransform级联
例如父节点变换到(500000,0,0)的位置,然后子节点进一步变换到(112.123,0,0)这样的位置

该用户从未签到

 楼主| 发表于 2014-5-17 20:48:24 | 显示全部楼层
array 发表于 2014-5-5 00:02
避免抖动,最简单的方式是用多个MatrixTransform级联
例如父节点变换到(500000,0,0)的位置,然后子节点进 ...

谢谢Array 大哥的回复,是我自己想岔了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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