2D物理引擎游戲中任意形狀的構建

任意多邊形

常見的2D物理引擎冷溃,有Box2D因块、P2等菜循,一般都有基礎常用形狀:圓束析、矩形等,能夠滿足大部分游戲需求拦惋,而一些復雜的游戲需要更精細更普通的形狀匆浙,這就要用到多邊形,一般引擎都有支持架忌。

多邊形分為兩種:凸多邊形和凹多邊形。前者很常見我衬,引擎都支持叹放,但后者未必饰恕。其實本質上,應該沒有2D物理引擎直接支持凹多邊形的井仰,這和底層渲染有關埋嵌,此處不做深究。因此一個凹多邊形必須拆分出多個子凸多邊形俱恶,然后使用物理剛體雹嗦。

單獨就Box2D和P2為例,凸多邊形都可以直接構建很簡單合是,一個形狀就能夠完成了罪,不必贅述。著重講下凹多邊形的構建聪全。

1. Box2D

不支持凹多邊形泊藕,只能自己將形狀的一組頂點拆分∧牙瘢可以參考下面這個示例娃圆,將任意多邊形拆分為三角形,拿到處理后的頂點組再去構建凸多邊形蛾茉。

Github地址:
https://github.com/pury/SPTools/tree/master/Polygon2Triangle

2. P2

引擎底層支持構建凹多邊形讼呢,可以直接創(chuàng)建,推薦使用谦炬。最關鍵的是凹多邊形創(chuàng)建后悦屏,是多個形狀shapes,設置碰撞掩碼時吧寺,需要將所有形狀遍歷設置窜管。剛體不需要設置坐標,引擎會自動計算出重心稚机。

官方在線實例:
http://schteppe.github.io/p2.js/demos/concave.html

var path = [[-1, 1], [-1, 0], [1, 0], [1, 1], [0.5, 0.5]];
var body;
body = new p2.Body({ mass:1});
body.type = p2.Body.STATIC;
var result = body.fromPolygon(path, { removeCollinearPoints: 0.01 });
if (!result) return;
world.add_body(body);

for (var iii in body.shapes)
{
  var shape = body.shapes[iii];
  shape.collisionGroup = Math.pow(2, 6);
  shape.collisionMask = Math.pow(2, 6);
  shape.material = new p2.Material(Math.pow(2, 7))幕帆;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赖条,隨后出現(xiàn)的幾起案子失乾,更是在濱河造成了極大的恐慌,老刑警劉巖纬乍,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碱茁,死亡現(xiàn)場離奇詭異,居然都是意外死亡仿贬,警方通過查閱死者的電腦和手機纽竣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜓氨,你說我怎么就攤上這事聋袋。” “怎么了穴吹?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵幽勒,是天一觀的道長。 經常有香客問我港令,道長啥容,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任顷霹,我火速辦了婚禮咪惠,結果婚禮上,老公的妹妹穿的比我還像新娘泼返。我一直安慰自己硝逢,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布绅喉。 她就那樣靜靜地躺著渠鸽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柴罐。 梳的紋絲不亂的頭發(fā)上徽缚,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音革屠,去河邊找鬼凿试。 笑死,一個胖子當著我的面吹牛似芝,可吹牛的內容都是我干的那婉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼党瓮,長吁一口氣:“原來是場噩夢啊……” “哼详炬!你這毒婦竟也來了?” 一聲冷哼從身側響起寞奸,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呛谜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后枪萄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隐岛,經...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年瓷翻,在試婚紗的時候發(fā)現(xiàn)自己被綠了聚凹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片割坠。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妒牙,靈堂內的尸體忽然破棺而出韭脊,到底是詐尸還是另有隱情,我是刑警寧澤单旁,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站饥伊,受9級特大地震影響象浑,放射性物質發(fā)生泄漏。R本人自食惡果不足惜琅豆,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一愉豺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茫因,春花似錦蚪拦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洛巢,卻和暖如春括袒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稿茉。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工锹锰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漓库。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓恃慧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親渺蒿。 傳聞我的和親對象是個殘疾皇子痢士,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348