Box2D 的 PTM_RATIO

原文链接:http://blog.csdn.net/zhangxaochen/article/details/8009508

根据box2d 的帮助文档:


1.7 Units

Box2D works with floating point numbers and tolerances have to be used to make Box2D perform well.These tolerances have been tuned to work well withmeters-kilogram-second (MKS) units. In particular, Box2D has been tuned to work well with moving objects between 0.1 and 10meters. So this means objects between soup cans and buses in size should work well. Static objects may be up to 50meters big without too much trouble.

Being a 2D physics engine, it is tempting to use pixels as your units. Unfortunately this will lead to a poor simulation and possibly weird behavior. An object of length 200 pixels would be seen by Box2D as the size of a 45 story building.

box2d 使用MKS: 米-千克-秒 单位制,因为文档称他的浮点运算在这样的单位下表现最佳。

一般情况下,我们希望将屏幕比如 480*320 映射为10米见方左右,那么习惯上设置的 像素-米 比率为 32,即#define PTM_RATIO 32 【PTM: pixel to meter】,那么我们便将屏幕映射到了 15m*10m 这样的小世界里去。

我们可以很快接受这个概念。但是,昨天我突然有一个奇怪的念头:

box2d 怎么知道我的 ptm_ratio 多大?或者说,为什么无论 PTM_RATIO 设为32 还是64, 为什么那个 groundBox 外边框总是能充满屏幕呢?

想了很久才明白,事实上,box2d 从来不知道也不在乎 PTM_RATIO 的大小。 这个物理引擎就想一个瞎了眼的数学高手,一直在算啊算,但是他并不负责图形的呈现。是我们写的cocos2d 的代码调用了openGles去做的绘制的工作。

如果我们设定 #define PTM_RATIO 32 那么屏幕被映射为 15*10 平米,而呈现——即,把米换为屏幕坐标的时候,一般都会做 ‘某坐标*PRM_RATIO’ 的工作,意思就是,放大32倍画在屏幕上。

如果 #define PTM_RATIO 64的话,尽管屏幕被映射为 7.5*5 平米的世界,似乎小了(物理世界确实小了),但是绘制的时候,因为我们对cocos2d 说:“给我放大64倍画出来”,所以看起来 groundBox 外框仍然充满屏幕。。。

就是这样。

原文链接:http://blog.csdn.net/zhangxaochen/article/details/8009508

你可能感兴趣的:(cocos2d-x,box2D)