[OSG]大数据顶点坐标造成图元闪烁分析与解决
1. 问题描述
某一次需要在地球上绘制模型,当时通过osg::Geometry绘制模型的时候,将ECEF坐标系上的值作为了模型的顶点坐标,发现绘制出来的模型顶点变形,在相机移动的时候,模型的三角面也疯狂地闪烁抖动。
2. 分析
首先,模型能够看得见,说明模型本身的顶点坐标是有效的。
其次,模型是静态模型,没有更新顶点,在相机移动过程中,看到模型的图元闪烁,这里的直觉是顶点乘以MVPW矩阵之后的结果产生了误差!
刚好又想到一个地方,我没有手动使用着色器,也就是使用的OpenGL固定渲染管线,OSG在每一帧更新的时候会向渲染管线设置顶点坐标、ModelView矩阵、Projection矩阵、Window矩阵。在固定渲染管线里面,用的是单精度浮点数,地球的半径在6371000米左右,如果其中一个顶点坐标的值是(6371000.5, 0, 0),当被传到渲染管线的时候,就变成了(6371000.00, 0, 0),对于渲染管线来说,顶点坐标不就出错了吗!!!
所以,要避免精度损失,就得将顶点坐标变小,尽量靠近局部坐标系原点。
那么将ECEF的值,减去一个偏移量Offset,作为模型的顶点坐标,然后给这个模型一个偏移Offset的矩阵。因为图元最终屏幕坐标是
ScreenPos=Position∗Model∗View∗Projection∗Window ScreenPos = Position * Model * View * Projection * Window ScreenPos=Po

最低0.47元/天 解锁文章
1530

被折叠的 条评论
为什么被折叠?



