Box2D 如何处理位置和坐标?

How does Box2D handle positions and coordinates?

我正在玩弄 SFML 和 Box2D,在 SFML 中,形状的位置由它的 upper-left 角定义。此外,SFML 处理坐标的基础是 (0, 0) 是屏幕的 upper-left 角,x-axis 向右延伸,y-axis 向下延伸。

所以,我有两个问题。

Box2D 是否具有原点在某个特定位置(如左上角或中心)的概念,或者因为它与渲染无关?

我在某处读到,设置 body 的位置集是 object 的 中心 与 upper-left 角落,如 SFML。这是真的?例如:

b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0.0f, -10.0f);

这是否意味着 body 以 (0, -10) 为中心,或者它的 upper-left 角位于 (0, -10)?

Box2D 处理位置和坐标,就好像它们是距离世界原点的水平和垂直米。换句话说,坐标 b2Vec2(2.0f, 3.0f) 表示原点右侧 2 米和原点上方 3 米的点(假设视觉表示右侧为正 X,顶部为正 Y)。正如您指出的那样,左右和上下是可以互换的,因为它是不可知的,但是如果您将 b2Vec2(2, 3) 坐标与 b2Vec2(0, -10) 的重力配对,并按照描述的方式直观地表示坐标,那么动态 body 将在视觉上加速向下,假设没有任何东西可以阻止它。

设置 body 的位置会设置它相对于世界原点的位置。它还为与 body 关联的形状(通过固定装置)提供了排序本身的原点,因为用于形状的坐标是相对于它关联的 body 的位置。

在回答你的最后一个问题时,将 groundBodyDef 位置设置为 (0.f, -10.0f) 意味着使用 groundBodyDef 创建的 body 将位于 (0.f, -10.0f)并且您附加到 body 的任何形状都将相对于该位置。将它视为一个中心对我来说本身并没有错;至少与将 (0, 0) 的二维原点视为图形的中心一样错误。如果您将位置与质量方面的中心混淆,您可能会在考虑中心方面遇到麻烦。

希望这对您有所帮助。