我使用的是Farseer Physics,它是用C#重写的Box2D的一个分支。
根据我的理解,Farseer / Box2D引擎对世界大小没有严格的限制。在我的理解中,唯一的限制是随着世界尺寸的增加,精度将降低到可见毛刺的程度。目前,Farseer对所有值(例如向量)使用float
类型。通过使用更高精度类型(如double
或decimal
替换所有浮点数,可以使有效最大世界大小增加吗?交换这些是否有任何有意义的缺点,或者它是一个非常直接的1比1?
答案 0 :(得分:1)
根据我的理解,Farseer / Box2D引擎对世界大小没有严格的限制。在我的理解中,唯一的限制是随着世界尺寸的增加,精度将降低到可见毛刺的程度。
是的。有关此问题的参考,请参阅What units does Box2D use?。或Maximum World Size and Units。
通过用高精度类型(如double或decimal )替换所有浮点数会使有效最大世界大小增加吗?
为了清晰起见,我添加了斜体文字。
根据我的经验简短回答:排序,是的。
可以在Switching JBox2D (Box2D) from Float to Double precision中找到相关的在线讨论。
请注意,虽然double的max和least值的大小大于float的最大值和最小值,但仍然存在一些限制,例如部分针对{{{然而,float
类型的3}}。
交换这些是否有任何有意义的缺点,或者它是一个非常直接的1比1?
以下是我可以预见的一些缺点:
double
超过float
的内存访问量增加,某些计算速度会变慢。double
与float
相比精度要求提高,因此某些计算速度较慢。float
进行了优化,因此您可能需要调整它们以使用double
。这些是否有意义,将取决于个人情况和用户。我制作了一个使用双打的太阳系演示,以便它所代表的所有内容都可以按比例表示,包括碰撞。不可否认,我使用了Box2D派生物理引擎,但原则上我认为事情也应该能够在Box2D中运行。
希望这有帮助。