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

{{OVER}}

發佈了31 篇原創文章 · 獲贊 15 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章