我正在使用带有随机创建世界的directx 9在c ++中创建一个小游戏,并且当玩家远离3d起源(0,0,0)时出现问题3d渲染变得非常不精确,导致视觉问题。 我认为这是因为发送到着色器的值是浮点数,并且浮点数在增加时变得不那么精确。 我虽然想要一个解决方案来移动所有模型而不是移动相机,但它会进行更多的计算,我担心可能的性能下降。
有解决这个问题的技巧吗?
由于
答案 0 :(得分:4)
问题可能是你达到了单精度浮点数的精度限制。有许多方法可以避免这些问题,具体取决于您的设置以及您遇到的具体问题;你可以找到一个不需要严重影响性能的产品。
从你的问题来看,我怀疑你已经建立了一个具有任意原点的大世界,它被渲染为单个网格。如果它与您的设置兼容,您可以考虑将您的世界分成一组图块,每个图块都有自己的原点。这会将精度问题从你的点转移到你的矩阵;因为附近的瓷砖和物体中的所有东西都不会远离原点,这可能会解决您自己的问题。
如果仍然存在精度问题,那么使用双精度为每个图块/对象生成一个矩阵比为场景中的每个点设置坐标要便宜得多。
请注意,这确实会增加从磁贴移动到磁贴时切换原点的问题。这是令人遗憾和令人讨厌的,但如果你想要一个比你的浮点数更大的世界,这种类似的东西可能是不可避免的!
答案 1 :(得分:0)
这是视频游戏行业中一个非常普遍的问题
您可以将生成的点数限制在修复网格中,以防止出现舍入问题。然后,您可以调整网格的密度,以在不够精确和视觉毛刺之间取得适当的平衡。
将你的原点放在地图的中心也是一件好事。
答案 2 :(得分:-1)