WPF 以双精度存储其所有数据。我只是想确认所有转换等都以双精度运行。
我正在处理一个非常大的 WPF 画布 (40,000,000 x 40,000,000),通过平移和缩放来放大它 - 在其上放置包含卫星图像的图块。为了缩放和平移,我使用 TransformGroup,其中包含 ScaleTransform 和 TranslateTransform。
当近距离放大时,当您稍微调整缩放变换时,图块似乎会摆动,就好像它们在画布上的位置略有变化,即使我所做的只是缩放变换。我担心转换不是以双精度完成的,而是被运送到硬件并以单精度完成。
有什么方法可以控制渲染变换的精度吗?或者至少确认它使用的是双精度而不是单精度?
谢谢。
前段时间,我注意到完全相同的事情:使用极端变换时渲染的位图将严重扭曲。我当时所做的一些测试让我确信 WPF 确实会将转换转发到 GPU,然后 GPU 使用单精度处理而不是双精度。
我发现的唯一解决方法是简化转换。例如,不要为图像指定 100,000 x 100,000 单位的大小和 0.0001 的比例因子,而是指定 1 单位的大小和 10 的比例因子。翻译也是如此。
根据您的设计,这可能意味着您的布局逻辑将变得更加复杂,因为您必须手动执行一些计算,而 WPF 会为您执行这些计算。对于允许大范围缩放级别的应用程序(例如从整个地球的视图到单个建筑物的视图),似乎没有其他方法。