Box2D 如何处理位置和坐标?



我正在玩SFML和Box2D,在SFML中,形状的位置由其左上角定义。此外,SFML 根据 (0, 0( 作为屏幕的左上角、向右延伸的 x 轴和向下延伸的 y 轴来处理坐标。

所以,我有两个问题。

Box2D 是否有原点在特定的地方(如左上角或中心(的概念,因为它渲染不可知?

我在某处读到,设置身体的位置集是对象的中心与左上角,就像 SFML 一样。这是真的吗?例如:

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

这是否意味着主体居中为 (0, -10( 或它的左上角位于 (0, -10(?

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

设置物体的位置会设置它相对于世界原点的位置。它还为与主体关联的形状(通过夹具(提供排序本身的原点,因为用于形状的坐标是相对于其关联主体的位置的

。在回答最后一个问题时,将groundBodyDef位置设置为(0.f, -10.0f)意味着使用groundBodyDef创建的实体将定位在(0.f, -10.0f)处,并且附加到该实体的任何形状都将相对于该位置。在我看来,将其视为中心本身似乎并没有错;至少没有比将 (0, 0( 的 2-D 原点视为图形中心更错误。你可能会在从中心的角度思考时遇到麻烦,但是如果你在质量方面混淆了位置和中心。

希望这有帮助。

最新更新