官术网_书友最值得收藏!

10.3 Box2d的調(diào)試渲染

Box2d只是一個(gè)物理引擎,本身并不提供顯示功能,只提供物理模擬的功能,因此可以很方便地運(yùn)用到那些2D游戲引擎當(dāng)中,在Box2d引擎的代碼中,提供了TestBed這個(gè)龐大的范例庫(kù)。

在TestBed中,GLUT完成了物理場(chǎng)景的渲染,以及其他的一些輸入和輸出的工作,那么在Cocos2d-x中,對(duì)Box2d的TestBed略加修改就可以搬到TestCpp里面了。

Box2d雖然不支持渲染,但提供了一個(gè)用于調(diào)試的渲染接口,在libBox2d項(xiàng)目的Common目錄下的b2Draw提供了繪制點(diǎn)、線、圓、多邊形等的接口,根據(jù)傳入的參數(shù),使用OpenGL的接口繪制它們,cpp-tests的Box2DTestBed中,GLESRender實(shí)現(xiàn)了這個(gè)功能。

需要注意的一點(diǎn)是,TestBed渲染的內(nèi)容是Debug Draw,而不是Game Draw,它僅僅只是一些點(diǎn)、線、圓而已(繪制的是調(diào)試內(nèi)容,而不是游戲內(nèi)容)。這套流程跟cpp-tests的Box2dTest不太一樣。

不管是在Box2d的TestBed還是Cocos2d-x的Box2dTestBed,它們的b2Draw對(duì)象的實(shí)現(xiàn)都在很好的工作,并且以后應(yīng)該也不會(huì)修改到這部分的代碼,在這里介紹如何使用OpenGL來(lái)繪制點(diǎn)、線、圓之類并不是很恰當(dāng),所以關(guān)于DebugDraw的渲染,我們只介紹它們是如何工作的,而不討論渲染的細(xì)節(jié)。

首先需要實(shí)現(xiàn)b2Draw接口,把它叫作GLESRender,并且需要有一個(gè)這個(gè)類的對(duì)象,通過(guò)World→SetDebugDraw(myDebugDraw);然后將它賦給World,接下來(lái),在每一幀模擬完物理世界之后,調(diào)用World→DrawDebugData()。

在每次調(diào)用DrawDebugData()函數(shù)的時(shí)候,Box2d都會(huì)根據(jù)當(dāng)前世界的所有對(duì)象的形狀等信息,調(diào)用b2Draw對(duì)象的繪圖函數(shù)來(lái)渲染。如果希望在Cocos2d-x中顯示調(diào)試信息,來(lái)幫助確定物理對(duì)象的顯示與實(shí)際的物理形狀是否一致,可以使用cpp-tests中Box2dTestBed示例的GLES-Render.h和GLES-Render.cpp文件,將GLESDebugDraw設(shè)置為物理世界的調(diào)試渲染對(duì)象。

主站蜘蛛池模板: 繁昌县| 永昌县| 蒙自县| 正宁县| 惠水县| 新巴尔虎左旗| 多伦县| 大关县| 讷河市| 金坛市| 通渭县| 北票市| 兴义市| 搜索| 潼南县| 上栗县| 仁寿县| 寻甸| 东阳市| 开江县| 沛县| 会昌县| 凤台县| 江阴市| 惠安县| 顺昌县| 遂川县| 胶南市| 濉溪县| 阳城县| 长海县| 清原| 繁峙县| 壶关县| 横山县| 于都县| 永吉县| 交口县| 滦平县| 富蕴县| 微山县|