经过大量研究,“我可以在 THREE.js 中提高矢量精度”这个问题的简短回答是肯定的,但它是一个高级主题。
长答案是:提高 Vector 精度基本上意味着提高 JavaScript Number 精度,因为 Vector 中的 x、y、z 和 w 值是常规 JavaScript Number。
增加数字精度需要考虑“epsilon”,这是对计算中潜在错误的度量。有关描述和可能的解决方案,请参见:http ://mathjs.org/docs/datatypes/numbers.html。由于数字的 64 位存储限制,Epsilon 出现在 JavaScript 数学中。
对于不同距离的 3D 对象的精度,您可以使用对数深度缓冲区来改进处理对象深度(或 Z 索引)的方式。它不像人们预期的那样是线性的。这是处理在远近距离都需要良好分辨率的场景的好方法。
如果您决定实施此解决方案,这里有 2 个不错的起点。看:
stackoverflow:对数深度缓冲区 OpenGL
Outerra:最大化深度缓冲范围和精度
我最初问这个问题是因为在使用太阳系中的数字范围时,我看到我的物体位置出现“抖动”或“抖动”。由于涉及的工作,我不想缩小我的人数,所以我研究了这个作为解决方案。我努力的最终结果是,对于我在 THREE.js 中的太阳系的目的,我可以使用的对象之间的距离是有限的。由于我的几何学,我不能使用大于 6 位有效数字的距离,这意味着例如水星通常的轨道半径 5790 万公里必须缩小到 5790 万公里,这意味着太阳将远越来越大,并且需要缩放自身,等等。基本上,要获得可靠的定位,我的太阳系直径只能是999,999公里。