WPF 3D收尾项目似乎是;“摇摆”;

WPF 3D收尾项目似乎是;“摇摆”;,wpf,3d,precision,visual-artifacts,Wpf,3d,Precision,Visual Artifacts,我正在用WPF编写一个3D地球仪控件 大多数情况下效果都很好,但当我从太近的地方(比如10米或更小)看山时,它会变得“摇摆”(意思是相机的每一个微小移动都会改变山模型的顶点,所以看起来像果冻) 我试着使用近平面和远平面,在近平面上指定范围从0.001到5,在远平面上指定范围从100到1000000,甚至是正无穷大,但没有效果 我还尝试将模型从其大小的1/10缩放到10倍,甚至将Lat/Long/Alt到ECEF的结果舍入到厘米、米和10米单位 没有任何帮助,它仍然看起来摇摆不定(虽然四舍五入到1

我正在用WPF编写一个3D地球仪控件

大多数情况下效果都很好,但当我从太近的地方(比如10米或更小)看山时,它会变得“摇摆”(意思是相机的每一个微小移动都会改变山模型的顶点,所以看起来像果冻)

我试着使用近平面和远平面,在近平面上指定范围从0.001到5,在远平面上指定范围从100到1000000,甚至是正无穷大,但没有效果

我还尝试将模型从其大小的1/10缩放到10倍,甚至将Lat/Long/Alt到ECEF的结果舍入到厘米、米和10米单位

没有任何帮助,它仍然看起来摇摆不定(虽然四舍五入到10米单位确实有帮助,在这种情况下摇摆是非常罕见的,但它会使模型变形到无法使用的程度)

我想这主要是一个精度问题。你知道我该如何提高精度吗?或者你知道如何修复它吗

伊泰

更新: 我添加了一个示例来演示该工件

已解决 我发现在World Wing中构建模型也存在同样的问题,我问了又回答

正如我所怀疑的,一般来说,这个问题是一个精度问题。解决此问题的方法是将实际摄影机保持在原点(0,0,0),同时允许其旋转,并将所有瓷砖朝相反方向移动

生成每个平铺时,我从平铺的每个顶点减去平铺的XYZ中心,因此最终的平铺围绕(0,0,0)构建


在瓷砖
GeometryModel3D
中,我设置了一个平移变换,以便将其放置在正确的位置。

我发现World Wing中的建筑模型也存在同样的问题,并进行了询问和回答

正如我所怀疑的,一般来说,这个问题是一个精度问题。解决此问题的方法是将实际摄影机保持在原点(0,0,0),同时允许其旋转,并将所有瓷砖朝相反方向移动

生成每个平铺时,我从平铺的每个顶点减去平铺的XYZ中心,因此最终的平铺围绕(0,0,0)构建


在平铺
GeometryModel3D
中,我设置了平移变换,以便将其放置在正确的位置。

您是否尝试将相机的移动增量调整到缩放级别?我想,一点代码也会有帮助,尽管我确信这里涉及到很多代码,我不想帮助您找到相关的代码。我不明白“将相机的移动增量调整到缩放级别”意味着什么。。。摄像机由键盘、鼠标或管理器代码控制,通常以Lat/Long/Alt格式给出(带或不带音调)。然后,使用与构建地形模型相同的方法将位置转换为XYZ。我建议尝试“使相机移动越慢,放大越大”。也许我不明白摇摆的意思,我加了一段视频来演示这个人工制品。相机几乎不动,整个模型“摇晃”。看起来,如果顶点的坐标“跳跃”一小步。但是,由于您已经考虑了舍入问题并消除了这些问题,我担心,如果没有代码,我将无法帮助您;)但我对这个话题投了赞成票。