在高范围位置提高DirectX的精度?

时间:2011-02-15 23:07:20

标签: c++ algorithm directx shader

我正在使用带有随机创建世界的directx 9在c ++中创建一个小游戏,并且当玩家远离3d起源(0,0,0)时出现问题3d渲染变得非常不精确,导致视觉问题。 我认为这是因为发送到着色器的值是浮点数,并且浮点数在增加时变得不那么精确。 我虽然想要一个解决方案来移动所有模型而不是移动相机,但它会进行更多的计算,我担心可能的性能下降。

有解决这个问题的技巧吗?

由于

3 个答案:

答案 0 :(得分:4)

问题可能是你达到了单精度浮点数的精度限制。有许多方法可以避免这些问题,具体取决于您的设置以及您遇到的具体问题;你可以找到一个不需要严重影响性能的产品。

从你的问题来看,我怀疑你已经建立了一个具有任意原点的大世界,它被渲染为单个网格。如果它与您的设置兼容,您可以考虑将您的世界分成一组图块,每个图块都有自己的原点。这会将精度问题从你的点转移到你的矩阵;因为附近的瓷砖和物体中的所有东西都不会远离原点,这可能会解决您自己的问题。

如果仍然存在精度问题,那么使用双精度为每个图块/对象生成一个矩阵比为场景中的每个点设置坐标要便宜得多。

请注意,这确实会增加从磁贴移动到磁贴时切换原点的问题。这是令人遗憾和令人讨厌的,但如果你想要一个比你的浮点数更大的世界,这种类似的东西可能是不可避免的!

答案 1 :(得分:0)

这是视频游戏行业中一个非常普遍的问题

您可以将生成的点数限制在修复网格中,以防止出现舍入问题。然后,您可以调整网格的密度,以在不够精确和视觉毛刺之间取得适当的平衡。

将你的原点放在地图的中心也是一件好事。

答案 2 :(得分:-1)