




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、物理引擎和圖形引擎介紹2015-21 引言1 2物理引擎是一個仿真物理系統(tǒng)的軟件,它使虛擬世界中的物體運動符合真實世界的物理定律,對虛擬現(xiàn)實中的物體進行運動學(xué)、動力學(xué)、其它物理學(xué)仿真等。在虛擬現(xiàn)實系統(tǒng)開發(fā)中,開發(fā)人員可以使用物理引擎與渲染引擎相結(jié)合的方法,不但可以縮短開發(fā)周期,而且可以產(chǎn)生良好的效果。隨著虛擬現(xiàn)實技術(shù)的發(fā)展,物理引擎已廣泛應(yīng)用在游戲、動畫、電影、工程仿真和軍事模擬等諸多領(lǐng)域。在以往的游戲中,例如一位士兵往一個油桶旁邊扔一個手雷,手雷爆炸,引起了油桶的爆炸。不過這個過程顯得相當(dāng)死板,不管是把手雷丟在油桶的左邊還是右邊,油桶都只會按照設(shè)計者預(yù)先設(shè)計好的腳本方式爆炸,不會有區(qū)別。加入
2、物理引擎后,它完全突破了以往按預(yù)定腳本執(zhí)行的方式,在游戲中的物體都遵守物理定律來運行,這樣手雷扔在油桶的左邊或右邊都會產(chǎn)生不同的爆炸效果,石塊會朝不同的角度飛濺起來,煙霧也會慢慢冒起來,使游戲更加富有真實感。通常物理引擎可以分成兩類:高精度物理引擎和實時物理引擎。高精度物理引擎要求計算出精度很高的物理對象,通常用于工程仿真或用電腦制作電影中的動畫。在視頻游戲中,物理引擎通過簡化其運算復(fù)雜度,降低其精度來滿足游戲中對實時性的需求,以增加動畫的真實感。物理引擎使用對象屬性(速度、加速度、動量、沖量、碰撞、力、力矩、阻尼、扭矩或彈性等)來模擬剛體的運動、旋轉(zhuǎn)和碰撞等行為,這不僅可以得到更加真實的結(jié)果
3、,對于開發(fā)人員來說也比編寫行為腳本要更加容易掌握。好的物理引擎允許模擬復(fù)雜的機械裝置,像球形關(guān)節(jié)、輪子、氣缸或者鉸鏈等。有些還支持非剛性體的物理屬性,如軟體、流體等。物理引擎只關(guān)心動力學(xué)微分方程的求解,而為了獲得逼真的仿真環(huán)境,還需要圖形引擎的配合。輸入場景信息(包括物體的形狀、物理參數(shù)和位置等),通過物理引擎計算出場景中所有物體的形狀和位置,再由圖形引擎渲染它們,最終將它們顯示在計算機上。目前常用的物理引擎有Havok、PhysX、Bullet、ODE、Newton、Vortex和TOKAMAK等,常用的圖形引擎有OGRE、OSG、OpenGVS和Vtree等。本文將介紹物理引擎Havok、
4、PhysX、Bullet、ODE和圖形引擎OGRE、OSG的背景、功能、用法及其在工程仿真領(lǐng)域中的應(yīng)用,以及物理引擎和圖形引擎聯(lián)合應(yīng)用的方法。2 物理引擎2.1 Havok13Havok公司成立于1998年,總部位于愛爾蘭首都都柏林。該公司在2000年游戲開發(fā)者大會上發(fā)布了Havok 1.0 ,在2003年的GDC上發(fā)布了2.0版本,在2007年3月發(fā)布4.5版本,最新版本為5.5。引擎基于C/C+語言而成。2007年9月,Intel宣布收購Havok之后不久,Intel宣布Havok引擎開放源代碼并允許游戲開發(fā)人員免費使用。自從Havok引擎發(fā)布以來,它已經(jīng)被應(yīng)用到數(shù)百個游戲之中。最早,使用
5、Havok引擎的游戲大多數(shù)都是第一人稱射擊類別,但隨著游戲開發(fā)的復(fù)雜度與規(guī)模越來越大,其他類型的游戲也想要有更加真實的物理表現(xiàn),有越來越多的其他類型的游戲采用Havok引擎。應(yīng)用Havok的著名游戲有:暗黑破壞神III、星際爭霸II、半條命2、刺客信條:兄弟會、馬克思佩恩2、凱恩與林奇:死人、凱恩與林奇2:伏天、榮譽勛章:太平洋突襲、斬除妖魔、帝國時代III、極度恐慌、細(xì)胞分裂:混沌法則、光環(huán)2、光環(huán)3、大亂斗Smash Brothers X以及上古卷軸IV:湮沒等。使用Havok的軟件有3D Mark06、3DMark Vantage、3ds Max、Adobe Atmosphere和Ado
6、be Shockwave等。Havok具有以下主要功能: 碰撞檢測(包括連續(xù)的物理體) MOPP技術(shù)(大碰撞網(wǎng)格的簡潔表達(dá)) 動力學(xué)和約束的求解 車輛動力學(xué) 數(shù)據(jù)序列和布景工具支持 內(nèi)置診斷反饋虛擬調(diào)試器Havok注重在仿真和游戲中對現(xiàn)實世界物理行為的模擬,提供了大量的應(yīng)用程序編程接口(API),用于剛體建模、碰撞檢測和實時動力學(xué)計算等。利用該引擎,可快速建立虛擬三維物理世界,以及物理世界中的物理實體,并向物理實體添加物理屬性,完成仿真系統(tǒng)的實時計算,并檢測計算結(jié)果?!皫笔欠抡嫦到y(tǒng)中的單幅畫面,兩個連續(xù)幀之間的時間間隔稱為幀時間。Havok物理引擎的工作流程就是在上一幀渲染完畢之后,以及下一
7、幀渲染開始之前的幀時間內(nèi),將外部設(shè)備的輸入信號轉(zhuǎn)化為物理世界中具有物理屬性的實體的受力,根據(jù)實體間的約束信息,進行碰撞檢測以及活動實體的受力分析,求出加速度和角加速度等,最后對時間進行積分求出實體在下一幀中的位置和姿態(tài)。求解完畢之后交付圖形引擎渲染,并進入下一個計算過程。對于交互式仿真系統(tǒng),物理引擎還要有接收外部設(shè)備的輸入信號并轉(zhuǎn)化為實體力和力矩的功能。Havok物理引擎的處理流程如下圖所示。在其官方網(wǎng)站:http:/ www. SDK、樣例、技術(shù)文檔,以及支持Maya、3ds Max和Avid XSI等3D建模軟件的格式轉(zhuǎn)換工具等。2.2 PhysX1349PhysX物理運算引擎由五名年輕的
8、技術(shù)人員開發(fā),他們在2002年成立了Ageia公司,于2005年發(fā)布了NovodeX,后改名為PhysX。2006年Ageia公司發(fā)布了第一張PhysX PPU(物理加速卡),稱為PhysX 100 Series,設(shè)計為搭載128MB GDDR3顯存,采用PCI接口。生產(chǎn)PhysX 100 Series的包括華碩和BFG,其中華碩的PhysX物理加速卡搭載了256MB GDDR3顯存。后來,Ageia公司又開發(fā)了第二代PhysX物理加速卡,稱為PhysX 200 Series,與第一代產(chǎn)品最大的不同在于采用了PCI-E插槽,增強了數(shù)據(jù)交換能力。2008年Ageia公司被NVIDIA(英偉達(dá))收
9、購后,PhysX物理加速卡停止了開發(fā),但NVIDIA在原基礎(chǔ)上推出了NVIDIA PhysX物理加速,并將PhysX物理加速功能移植到NVIDIA GPU中。借助CUDA架構(gòu),NVIDIA重新編寫了PhysX物理加速程序,將PhysX物理加速引擎從Ageia PPU移植到了NVIDIA GPU上,利用GPU強大的浮點計算能力和并行處理能力,加快了PhysX物理引擎的計算速度。使用PhysX的著名游戲有:虛幻競技場3、幽靈行動2:尖峰戰(zhàn)士、好戰(zhàn)者(warmonger)、細(xì)胞因子、賭命戰(zhàn)士、戰(zhàn)爭機器、Beowulf、 City of Villains Medal Of Honor: Airborn
10、e、 Bladestorm: The Hundred Years War等140多款經(jīng)典游戲。PhysX是一個模擬剛體動力學(xué)的物理引擎,支持速度、加速度、動量、沖量、碰撞等物理概念。PhysX的開發(fā)庫支持跨平臺,多線程,高速碰撞檢測等特性,專門對汽車的物理模擬做了優(yōu)化??梢詫崿F(xiàn)軟、固質(zhì)體動力學(xué)、通用碰撞檢測、有限元分析、流體動力學(xué)、關(guān)節(jié)鉸鏈模擬、毛發(fā)模擬、布料模擬、自然模擬等。PhysX具有以下主要功能: 大量平行物理體的體系結(jié)構(gòu) 高速GDDR3存儲接口 通用的連續(xù)碰撞檢測 物理的敏捷粒子技術(shù) 復(fù)雜的對象物理系統(tǒng) 可升級的地形逼真度 動力學(xué)游戲構(gòu)架利用GPU超強的并行處理能力,PhysX使物理
11、加速處理能力呈指數(shù)倍增長,將游戲、工程模擬等提升至一個全新的水平,呈現(xiàn)豐富多彩、身臨其境的環(huán)境。其特色如下: 爆炸引起的煙塵和隨之產(chǎn)生的碎片 復(fù)雜、連貫的幾何學(xué)計算使人物的動作和互動更加逼真 布紋的編織和撕裂效果非常自然 運動物體周圍煙霧翻騰所有的物理模擬都在場景(Scene)中進行,一個虛擬環(huán)境允許同時存在多個場景,場景各自進行模擬運算,通常之間的對象沒有聯(lián)系。場景中可包含角色、關(guān)節(jié)等多個對象,角色(Actor)為場景中參與運算具有形狀、實體的對象,形狀(Collision Shape)用于描述角色的外形,提供六種基本形狀:盒子(Box) 、球體( Sphere ) 、膠囊( Cap sul
12、e ) 、凸?fàn)罹W(wǎng)格( Conv2exMesh) 、三角網(wǎng)格( TriangleMesh) 和平面( Plane ) ,用多個基本形狀可以組成較復(fù)雜物體。實體(Body)用于描述角色的物理參數(shù),比如密度、質(zhì)量、重心、慣性張量等。兩個角色可以通過關(guān)節(jié)( Joint)連接,常用的關(guān)節(jié)有固定關(guān)節(jié)( Fixed Joint) 、旋轉(zhuǎn)關(guān)節(jié)(Revolute Joint) 、球狀關(guān)節(jié)( Spherical Joint) 和棱柱關(guān)節(jié)等多種形式,可根據(jù)需要選擇關(guān)節(jié)使物體的連接符合真實情景。此外場景中還可創(chuàng)建流體、布料、粒子等其他可描述現(xiàn)實世界的對象。PhysX引擎提供了上述多種關(guān)節(jié)來實現(xiàn)多個角色的連接,其中,固
13、定關(guān)節(jié)可以模擬鉚接、焊接、螺釘固定等連接方式;旋轉(zhuǎn)關(guān)節(jié)模擬鉸接連接方式,可使兩個角色圍繞一條軸線發(fā)生轉(zhuǎn)動,如合頁、門柱;球狀關(guān)節(jié)用來模擬肩關(guān)節(jié)、球鉸等連接方式,可使兩個角色圍繞一個點發(fā)生自由轉(zhuǎn)動;棱柱關(guān)節(jié)模擬滑動連接方式,可使兩個角色沿一條軸線運動,如吸振器;此外還有圓柱關(guān)節(jié)、滑輪關(guān)節(jié)、點線關(guān)節(jié)、點面關(guān)節(jié)、六自由度關(guān)節(jié)等多種連接方式,開發(fā)人員可根據(jù)需要,將單個角色利用關(guān)節(jié)進行組合,實現(xiàn)人物、機器、汽車等復(fù)雜物體的模型創(chuàng)建。場景中的角色對象分為靜態(tài)角色( Static Actor) 、動態(tài)角色(Dynamic Actor)和運動角色(Kinematic Actor)。靜態(tài)角色對象主要用于碰撞檢測
14、,必須有形狀屬性而無實體屬性,靜態(tài)角色一旦被創(chuàng)建,就不能對它進行任何操作。動態(tài)角色是符合物理學(xué)定律的普通剛體,比如移動的汽車、可推動的箱子等。運動角色是一種特殊的動態(tài)角色,不接受外力作用,只能由用戶操作從一個位置移動到另一個位置。在場景中運動角色會與動態(tài)角色發(fā)生碰撞,而不會與靜態(tài)角色發(fā)生作用。在其官方網(wǎng)站:2.3 Bullet156Bullet是一個開源的跨平臺的物理模擬計算引擎,可免費用于包括PLAYSTATION 3,XBox 360,Wii PC,Linux,Mac OSX and iPhone平臺的商業(yè)開發(fā),而且Bullet也整合到了Maya和Blender 3D中。大部分的物理引擎都
15、是通過CPU完成物理模擬計算,目前僅有NVIDIA PhysX可以調(diào)用GPU完成物理模擬計算且將其實用化。GPU有著CPU無法比擬的并行計算和浮點計算能力,而復(fù)雜的物理模擬計算(例如流體模擬和柔性物體模擬)卻十分依賴并行計算能力和浮點計算能力。在與AMD合作后,Bullet Physics物理引擎可以透過OpenCL或者Direct3D,使用GPU完成物理模擬計算,這也是AMD開放物理計劃的內(nèi)容之一。用Bullet開發(fā)的游戲有模擬城市(EA)、汽車總動員2、俠盜獵車4等。使用Bullet物理模擬引擎制作的電影有2012、全民超人、大偵探福爾摩斯和閃電狗等。支持Bullet物理引擎的設(shè)計軟件有B
16、lender 3D、Cienma 4D、3Ds Max和Maya等。Bullet具有以下主要功能: 各種形狀的物體(剛體、軟體) 離散的剛體碰撞檢測 鉸鏈、點對點約束和扭曲錐形約束 6自由度約束Bullet主要組件的結(jié)構(gòu)如下:Bullet中,根據(jù)物體的特性將它們分三種不同的物體類型:1)動態(tài)的剛體擁有大小為正的質(zhì)量,每個仿真幀都會更新自己的在世界中的變換。2)不能移動,但可接受碰撞的剛體稱為靜態(tài)剛體,質(zhì)量設(shè)為0。3)在運動學(xué)上面的剛體,質(zhì)量為0。使用運動學(xué)的剛體可以制作動畫,但是這種剛體能夠接受碰撞,只能對碰撞物體有作用,碰撞物體對運動學(xué)的剛體沒有任何影響。Bullet中剛體之間的位置和角度約
17、束關(guān)系是使用關(guān)節(jié)進行實現(xiàn),每種類型的關(guān)節(jié)約束在底層是使用動力學(xué)特性的約束方程,Bullet還提供對不同約束的solver(求解器)。Bullet在碰撞檢測方面包括射線和凸掃測試在內(nèi)的離散和連續(xù)碰撞檢測,可檢測的碰撞物體形狀包括凹凸網(wǎng)格以及所有的基本形狀。在碰撞檢測的初測階段,Bullet提供了基于重疊包圍盒的加速結(jié)構(gòu)方法快速排除碰撞對,方法有三種:使用AABB層次包圍體樹、增量三維掃描和裁剪以及使用GPU圖形硬件的快速均勻網(wǎng)格。Bullet的特性還包括快速和穩(wěn)定的剛體動力約束和求解、動態(tài)車輛、人物控制和滑動器、鉸鏈、普通的6自由度和針對碎布木偶的圓錐和扭曲約束。軟體動力學(xué)方面可用于布料、繩子和
18、雙向變?nèi)莸膭傮w,包括約束支持。在其官方網(wǎng)站: /可以免費下載Bullet的有關(guān)資源。2.4 ODE171011ODE (Open Dynamic Engine) 是一個免費的具有工業(yè)品質(zhì)的剛體動力學(xué)庫,一款優(yōu)秀的開源物理引擎,由Russell Smith在一些貢獻(xiàn)者的幫助下開發(fā)而成的。它能很好地仿真現(xiàn)實環(huán)境中的可移動物體,它是快速、強健和可移植的。而且它有內(nèi)建的碰撞檢測系統(tǒng)。非常適于對飛行器、交通工具和虛擬現(xiàn)實中物體的運動進行模擬。用ODE開發(fā)的游戲有Call of Juarez、Dead Island、Jumper Buggy、Mario Str
19、ikers Charged、Naild、Stunt Marble Racers、World of Goo、X-Moto、Overgrowth等。ODE具有以下主要功能: 支持任意的質(zhì)量分布的剛體 支持球套、鉸鏈、滑桿、特殊鉸鏈、固定、角向和普通連接 支持球體、盒子、膠囊、地面、射線和三角網(wǎng)格面碰撞圖元。 支持四叉樹、哈希和簡單碰撞空間 支持硬接觸和摩擦模型 碰撞檢測ODE在模擬關(guān)節(jié)連接的剛體結(jié)構(gòu)方面做得很好,例如模擬地面上的車輛的輪子通過關(guān)節(jié)被連接到底盤,有腿的生物的腿通過關(guān)節(jié)被連接到身體等等。ODE被設(shè)計用于交互式或?qū)崟r模擬,尤其是對模擬虛擬現(xiàn)實環(huán)境中的可移動物體做得特別好。使用者在模擬環(huán)境
20、中可以完全自由地改變系統(tǒng)的結(jié)構(gòu)。ODE具有一個內(nèi)建的碰撞檢測系統(tǒng),該系統(tǒng)通過空間(Spaces)的概念實現(xiàn)潛在的相交物體的快速識別。對于硬接觸,每當(dāng)兩個實體碰撞時,一個特別的非穿透約束被使用。在許多其他的模擬器中是使用虛擬彈簧處理接觸,這樣做是很容易出錯的。ODE時間步采用兩種方法:標(biāo)準(zhǔn)的大矩陣方法和較新的迭代快速時間步方法。接觸模型和摩擦力模型是建立在由Baraff描述的DantzigLCP方法上,實現(xiàn)快速逼近的庫倫摩擦力模型。ODE使用一個高度穩(wěn)定的一階積分器,所以模擬中的錯誤可以得到控制,這樣被模擬的系統(tǒng)就不會沒有理由的“崩潰”。ODE強調(diào)在物理準(zhǔn)確運行中的高速性和穩(wěn)定性,這也是它比其他
21、物理引擎的優(yōu)勢所在。在其官方網(wǎng)站:http:/ /可以免費下載ode-0.13.tar.bz2軟件等資源。3 圖形引擎3.1 OGRE48OGRE(Object-Oriented Graphics Render Engine)是用C + +開發(fā)的面向?qū)ο笄沂褂渺`活的3D圖形引擎,對底層Direct3D和OpenGL系統(tǒng)庫的全部使用細(xì)節(jié)進行了抽象,并提供了基于現(xiàn)實世界對象的接口,使用少量代碼就能構(gòu)建一個完整的三維場景,使開發(fā)人員更方便、更直接地開發(fā)基于三維硬件設(shè)備的應(yīng)用程序。OGRE引擎采用可擴展的程序框架,擁有高效率和高度可配置的資源管理器,支持多種場景類型,支持高效的插
22、件體系結(jié)構(gòu),采用高效的網(wǎng)格資料格式儲存模型數(shù)據(jù),并且具有清晰、整潔的設(shè)計以及全面的文檔支持,支持Windows,Linux以及Mac OSX等平臺。而且OGRE是一款開源引擎,更新迅速,功能日益強大,采用MIT授權(quán),使用時不會產(chǎn)生授權(quán)費用,OGRE引擎在涉及到三維圖形繪制的仿真、游戲等方面有著極為廣泛的應(yīng)用前景。OGRE引擎的場景管理結(jié)構(gòu)如下圖所示,根節(jié)點(Root)是整個三維場景的入口點,用于配置系統(tǒng)內(nèi)的其它對象,必須最先創(chuàng)建和最后釋放。渲染系統(tǒng)(Render System)設(shè)置場景的渲染屬性并執(zhí)行渲染操作。場景管理器( Scene Manag2er)負(fù)責(zé)組織場景,生成并管理燈光、攝像機、場
23、景節(jié)點、實體、材料等元素。燈光(Light)為場景提供照明,有點光源、聚光源和有向光源三種類型。攝像機(Camera)用來觀察所創(chuàng)建的場景,通過視口可將渲染后場景輸出到屏幕。實體( En2tity)為場景中的幾何體,一般通過網(wǎng)格(Mesh)創(chuàng)建。材質(zhì)(Material)為場景中幾何體的表面屬性,支持從多種格式的圖片文件加載紋理( Texture) ,并可擁有足夠多的紋理層,每層紋理支持各種渲染特效,支持動畫紋理。場景管理器通過場景節(jié)點( Scene Node)來確定實體、攝像機、燈光等元素的位置和方向。OGRE場景組織原理是將場景劃分成抽象的多個空間,這些空間還可以劃分成多個子空間,每個空間由
24、一個場景節(jié)點來管理,實體、燈光等場景元素本身并不負(fù)責(zé)與空間位置相關(guān)的行為,全部交給場景節(jié)點來做。OGRE將大量場景節(jié)點按照空間的劃分層次組織成樹狀結(jié)構(gòu),從而完成對整個場景的有序組織。在其官方網(wǎng)站:/可以免費下載OGRE 1.8.1 Source和OGRE 1.8.1 SDK for Visual C+ 2010 (32-bit)等資源。3.2 OSG 12-13OSG(OpenSceneGraph)場景圖形渲染引擎是一個開源的跨平臺圖形管理開發(fā)庫,主要為圖形圖像應(yīng)用程序的開發(fā)提供場景管理和圖形渲染優(yōu)化功能,被廣泛應(yīng)用于虛擬現(xiàn)實、虛擬仿真、地理信息系統(tǒng)(G
25、IS)、動畫、游戲、科學(xué)和工程可視化等領(lǐng)域。隨著OSG 模塊和第三方附加庫的不斷完善,OSG 已具備對高性能渲染、海量地形數(shù)據(jù)庫、地理信息及多通道的支持。OSG特性:1)質(zhì)量高。在程序架構(gòu)和執(zhí)行效率方面都有著較高的品質(zhì)。2)開源性。所有源代碼都是遵循OSGPL開源協(xié)議發(fā)布的。3)跨平臺。支持的操作系統(tǒng)平臺有Windows、UNIX、Linux、MacOSX、IRIX、Solaris、HP-UX、AIX和FreeBSD。4)可擴展性。強大的擴展能力,支持對節(jié)點、渲染屬性、回調(diào)以及交互事件的擴展,并且支持第三方插件擴展,目前引入的插件已有幾十種。三維場景數(shù)據(jù)的組織:場景的基本單位是節(jié)點,包括組節(jié)點
26、和葉節(jié)點。葉節(jié)點管理一個或多個可繪制體的信息,并可以通過它的接口函數(shù)對可繪制體的信息進行查詢。OSG渲染引擎采用一種自頂向下的、分層的樹狀結(jié)構(gòu)(場景樹)來實現(xiàn)空間數(shù)據(jù)的組織,這樣大大提高了場景的渲染效率。地理要素場景樹如下圖所示。在其官方網(wǎng)站:/可以免費下載OpenSceneGraph 3.2軟件等資源。4 應(yīng)用框架4物理引擎的功能是使模擬對象產(chǎn)生物理效果,最終將物理引擎生成的效果顯示在計算機上。輸入場景信息(包括物體的形狀、物理參數(shù)和位置等),通過物理引擎計算出場景中所有物體的新的形狀和位置,再由圖形引擎將它們渲染后顯示在計算機上。以P
27、hysX和OGRE為例介紹物理引擎與圖形引擎聯(lián)合應(yīng)用的框架。框架采用OGRE圖形引擎的初始化、輸入處理、幀循環(huán)更新圖形的流程,再將PhysX物理引擎的相關(guān)部分融入其中,其主要流程如下圖所示。首先對OGRE引擎進行初始化,創(chuàng)建需要在三維場景中顯示的對象、地形、燈光等元素,完成渲染之前的所有準(zhǔn)備;然后進行PhysX引擎的初始化,建立物理環(huán)境設(shè)置相關(guān)參數(shù);再根據(jù)OGRE場景中的幾何體創(chuàng)建用于模擬計算的動態(tài)、靜態(tài)或運動角色,將OGRE中的幾何體和PhysX中的角色一一對應(yīng)進行關(guān)聯(lián),并對各角色的位置、速度、受力等狀態(tài)參數(shù)進行設(shè)定,完成模擬計算前的所有準(zhǔn)備;之后創(chuàng)建幀監(jiān)聽器,進行幀循環(huán)更新圖形顯示,同時調(diào)
28、用PhysX引擎中的運算函數(shù),對場景中物體與物體之間的相互作用進行模擬運算。由于PhysX引擎的模擬計算線程是獨立的,與OGRE幀循環(huán)線程分開,因此物理引擎的計算過程與圖形引擎的顯示渲染過程同時進行。根據(jù)物理引擎計算的結(jié)果,更新場景內(nèi)物體的位置、方向、速度等參數(shù),將更新后的參數(shù)傳遞給OGRE更新圖形顯示,循環(huán)進行下一步模擬計算。5 應(yīng)用實例本章將介紹物理引擎Havok、PhysX、Bullet、ODE和圖形引擎OGRE、OSG在工程仿真領(lǐng)域中被成功應(yīng)用的六個例子。1)王波興等在“基于物理引擎的汽車起重機實時仿真3”中研究了Havok物理引擎在汽車起重機實時仿真中的應(yīng)用。提出了層次模型的汽車起重
29、機模型組織方法。該模型按整車各部件之間的關(guān)系逐層分解,將獨立的部件組織成樹狀結(jié)構(gòu),如下圖所示。在層次模型的基礎(chǔ)上,利用輸入設(shè)備接口、Havok物理引擎和OGRE圖形引擎實現(xiàn)了某型全路面多軸汽車起重機的實時駕駛和吊裝仿真。輸入設(shè)備接口包括方向盤,油門踏板,剎車踏板,檔位操縱桿,吊臂操縱手柄和吊鉤操縱手柄。操作設(shè)備的輸入通過傳感器轉(zhuǎn)化為計算機系統(tǒng)可以識別的數(shù)據(jù)。物理引擎中實體的受力來自于輸入設(shè)備的信號,物理引擎的求解結(jié)果也需要專業(yè)圖形引擎表現(xiàn)出來。2)于佳民等在“PhysX物理引擎在航天員虛擬現(xiàn)實訓(xùn)練系統(tǒng)中的應(yīng)用14”中研究了PhysX物理引擎在虛擬現(xiàn)實訓(xùn)練系統(tǒng)中的應(yīng)用,仿真航天員和物體在太空失重
30、狀態(tài)下運動特性。提出了一種基于PhysX物理引擎的仿真方法,建立了航天員虛擬現(xiàn)實訓(xùn)練系統(tǒng)架構(gòu):受訓(xùn)人員、人機交互設(shè)備、接口API 和物理引擎,見下圖所示。利用PhysX 物理引擎結(jié)合數(shù)據(jù)手套和位置跟蹤儀等人機交互設(shè)備建立了基于碰撞體的可驅(qū)動虛擬人體模型,并通過PhysX物體引擎實現(xiàn)了太空操作中人體與飛船及被操作物體之間的碰撞檢測,完成了手部接觸力計算及力反饋設(shè)備與PhysX接口。并對所建立的模型及方法進行了仿真驗證。仿真結(jié)果表明,利用所建立的方法可有效仿真人體及物體運動,增強了虛擬現(xiàn)實訓(xùn)練系統(tǒng)的沉浸感和真實感。3)蘇柏華在“大型結(jié)構(gòu)物吊裝的虛擬現(xiàn)實系統(tǒng)15”中研究了Bullet物理引擎在大型結(jié)
31、構(gòu)物吊裝的虛擬現(xiàn)實系統(tǒng)中的應(yīng)用。以汽車起重機和動態(tài)環(huán)境建模為基礎(chǔ),著重研究了兩臺起重機協(xié)同吊裝仿真的數(shù)學(xué)和物理模型,建立了基于Bullet物理引擎的協(xié)同吊裝仿真模型,此模型對起重機運行機構(gòu)進行了劃分,劃分成為動力學(xué)模型和運動學(xué)模型,此種分析方法有一定的通用性,能夠擴展到三臺和三臺以上的吊裝作業(yè)情況;把雙機協(xié)同的主臂臂頭的滑輪組、起升鋼絲繩、吊鉤、平衡梁、設(shè)備等進行必要的抽象,使用關(guān)節(jié)進行約束建立動力學(xué)模型;引入了基于有限自動機的數(shù)學(xué)模型來控制復(fù)雜的起重機,提高了起重機狀態(tài)控制的穩(wěn)定性;建立了基于開源的OGRE圖形渲染引擎的汽車起重機和吊裝設(shè)備的模型結(jié)構(gòu)樹,以及靜態(tài)和動態(tài)場景模型;開發(fā)了可維護、
32、可擴展、可復(fù)用、靈活的三維吊裝仿真系統(tǒng)軟件,實現(xiàn)了交互式的實時仿真系統(tǒng),提高了吊裝方案制作的高效性和準(zhǔn)確性。4)段化鵬在“虛擬現(xiàn)實中物理引擎關(guān)鍵技術(shù)的研究與應(yīng)用16”中研究了ODE物理引擎在巷道漫游系統(tǒng)中的應(yīng)用。建立了ODE物理引擎模擬的應(yīng)用框架,如下圖所示,其中對物體施加力及調(diào)用碰撞檢測都是在循環(huán)過程中進行。利用3DS Maxs創(chuàng)建礦井虛擬場景三維模型,以O(shè)greODE作為物理引擎進行碰撞檢測及動力學(xué)模擬,實現(xiàn)了人物與地面工業(yè)建筑以及人物與巷道的漫游模擬。將關(guān)聯(lián)的剛體用ODE的關(guān)節(jié)連接表示;人物用膠囊與球相連接的包圍盒表示,并且施加力與力矩,實現(xiàn)人物的移動與旋轉(zhuǎn);在物體上加三角網(wǎng)格面線,人物
33、與物體的碰撞用包圍盒與三角網(wǎng)格面的碰撞檢測。OgreODE是由monster所寫,它是ODE應(yīng)用于OGRE的物理引擎開發(fā)包,實現(xiàn)了OGRE與ODE的融合,它還提供了兩個預(yù)制的對象ragdoll和vehicle。5)廖晉民等在“地形影響下駕駛模擬器機動行為仿真技術(shù)研究17”中研究了ODE物理引擎在車輛駕駛模擬器中的應(yīng)用。利用開源物理引擎ODE(Open Dynamic Engine)和開源場景圖形引擎OSG(OpenSceneGraph),建立了一個逼真的虛擬駕駛環(huán)境,對車輛行為進行模擬,逼真地反映出車輛的爬坡、轉(zhuǎn)彎等行為。ODE是一個高性能的開源工業(yè)級剛體動力學(xué)模擬庫,內(nèi)建了采用硬碰撞方式的碰
34、撞檢測系統(tǒng),防止了碰撞時傳統(tǒng)現(xiàn)象的出現(xiàn),并提供了多種高級關(guān)節(jié)類型,如下面的hinge和hinge 2關(guān)節(jié)示意圖,十分適合于交通工具的運動模擬。典型的物理空間的構(gòu)建可以通過以下步驟完成:1)創(chuàng)建一個動力學(xué)世界;2)在動力學(xué)世界中創(chuàng)建各種剛體;3)設(shè)定各個剛體的狀態(tài)(位置等);4)在動力學(xué)世界中創(chuàng)建關(guān)節(jié);5)聯(lián)結(jié)關(guān)節(jié)到剛體上;6)設(shè)定所有關(guān)節(jié)的參數(shù);7)按需要創(chuàng)建一個碰撞世界和一個碰撞幾何體對象;8)創(chuàng)建一個關(guān)節(jié)組來保存所有的接觸關(guān)節(jié);9)循環(huán)a)按需要給物體施加力或扭矩;b)按需要調(diào)整關(guān)節(jié)的參數(shù);c)調(diào)用回調(diào)函數(shù)進行碰撞檢測;d)為碰撞點創(chuàng)建相應(yīng)的接觸關(guān)節(jié),并且將其添加到關(guān)節(jié)組中;e)執(zhí)行一個模
35、擬步驟;f)刪除接觸關(guān)節(jié)組中所有的接觸關(guān)節(jié);10)銷毀動力學(xué)和碰撞世界。通過上述過程,就能夠建立起一個具有物理屬性的物理空間,并在其中建立一個車輛的物理模型,對車輛的各種行為進行模擬。車輛在直線行駛時主要受到重力,地面支持力,車輛牽引力,空氣阻力,坡度阻力和地面阻力。當(dāng)車輛轉(zhuǎn)彎時,除了在行駛方向上受到上述后四種力外,在其徑向方向上還受到地面阻力和沿坡度阻力提供的向心力。文章考慮了坡度大小對地面阻力的影響、海拔對車輛牽引大小的影響,以及地面土質(zhì)對地面阻力的影響。由于ODE和OSG都是基于幀循環(huán)的,這就使得二者有結(jié)合起來的可能性。為了使場景圖形引擎創(chuàng)建的圖形模型具有物理引擎創(chuàng)建的物理模型的物理屬性
36、,需要創(chuàng)建物理世界和圖形世界,使物理模型與圖形模型一一對應(yīng),并且通過更新旋轉(zhuǎn)矩陣實時同步的更新虛擬物體的姿態(tài)和方向,最后用物理引擎的計算結(jié)果驅(qū)動場景圖形引擎進行繪制和渲染。具體流程如下圖所示。車輛的車身和車輪用hinge2 關(guān)節(jié)連接。這樣就建立了一個車輛的物理模型。相應(yīng)的就應(yīng)該建立一個CVehicle類,對車輛的物理屬性、地形影響因素和各種駕駛操作進行封裝。程序的基本結(jié)構(gòu)是采用一個循環(huán),利用物理模型不斷更新圖形模型的運動狀態(tài),達(dá)到二者運動的同步,不斷更新每幀畫面,產(chǎn)生連續(xù)運動畫面。在每一幀中,車輛都會探測它所處的地方屬于那一類地形,獲得海拔高度、土質(zhì)等外部影響因素,并據(jù)此對地面阻力因素、車輛最
37、大速度等變量賦予相應(yīng)的值,并帶入到相關(guān)方程中,調(diào)整車輛的運動狀態(tài)。下面二圖顯示了車輛在草地上轉(zhuǎn)彎和車輛爬坡的情景。 6)高嵩等在“基于OGRE和ODE的駕駛模擬系統(tǒng)的設(shè)計與實現(xiàn)18”中利用OGRE圖形渲染引擎和ODE物理引擎, 設(shè)計并實現(xiàn)了一個跨平臺的模擬汽車駕駛系統(tǒng)。利用3DS MAX和Milkshape3D建模軟件創(chuàng)建了虛擬場景和車輛模型,并轉(zhuǎn)化為OGRE模型;實現(xiàn)了交通信號燈動態(tài)模擬,確定了路網(wǎng)的數(shù)字化方案;實現(xiàn)了虛擬場景中的智能車輛,增強駕駛環(huán)境的真實感;實現(xiàn)了3D音效系統(tǒng),提高了系統(tǒng)的沉浸感。系統(tǒng)運行效果表明,通過系統(tǒng)實時產(chǎn)生的汽車行駛虛擬環(huán)境、3D音響效果和車輛運動仿真,使操作者具
38、有較真實的視覺、聽覺、觸覺等駕車感受。駕駛模擬器系統(tǒng)框架如下圖所示。操作者在駕駛模擬器上操縱各操縱機構(gòu), 駕駛模擬器上分布的傳感器實時地將各個操縱機構(gòu)的狀態(tài)傳送給信號采集處理單元(該單元負(fù)責(zé)雙向的A/ D, D/ A 和開關(guān)量的轉(zhuǎn)換工作)。這些操作信號分為兩類:一類是模擬量信號,包括油門開度、制動踏板位置、離合器位置、轉(zhuǎn)向盤轉(zhuǎn)角和駐車制動器位置;另一類是開關(guān)量信號,包括檔位、點火、喇叭、雨刮、左轉(zhuǎn)向、右轉(zhuǎn)向、霧燈和遠(yuǎn)近燈等。這些數(shù)據(jù)通過計算機串口發(fā)給駕駛模擬器軟件系統(tǒng),軟件系統(tǒng)通過計算得出虛擬車輛的新狀態(tài),并顯示在終端上,同時系統(tǒng)按當(dāng)前狀態(tài)通過聲效系統(tǒng)發(fā)出相應(yīng)的聲音。模擬器軟件系統(tǒng)把新得到的虛
39、擬車輛的發(fā)動機轉(zhuǎn)速、車體線速度、水箱溫度、油量表值通過串口發(fā)送至信號采集處理單元,使驅(qū)動儀表盤上各指針運動顯示出相應(yīng)刻度值。駕駛模擬器系統(tǒng)軟件結(jié)構(gòu)如下圖所示。1)資源管理器從外部文件中載入系統(tǒng)需用的資源, 包括模型文件( . mesh )、骨骼動畫文件( .skeleton)、粒子模板定義文件( . part icle)、材質(zhì)定義文件( . material)和各種圖像文件, 以備系統(tǒng)調(diào)用。2)建立場景管理器, 負(fù)責(zé)管理場景文件。系統(tǒng)從場景文件中載入場景,這個場景文件是xml格式,記錄著各個獨立模型的相對位置,場景管理器按給定文件載入模型,駕駛模擬系統(tǒng)以Dot scene方式管理,建立起虛擬場
40、景。3)道路信息管理器從道路信息文件中讀入道路信息。4)車輛對象管理器從車輛定義文件中載入車輛,這個文件也是xml格式的, 包含了車輛各個關(guān)鍵部件的幾何物理參數(shù)和外觀模型。載入后場景按道路管理器指定值設(shè)置車輛初始位置。5)OGRE幀監(jiān)聽器開始循環(huán)監(jiān)聽,讀取串口、鼠標(biāo)鍵盤和網(wǎng)絡(luò)數(shù)據(jù),并進行處理。6)OGRE渲染引擎見渲染的結(jié)果顯示在終端上。如果沒有收到用戶結(jié)束指令, 則進入下一個幀監(jiān)聽,否則結(jié)束渲染。駕駛模擬系統(tǒng)實現(xiàn)了逼真的場景渲染, 并且能生動的模擬出汽車駕駛的各種狀態(tài)。下圖顯示了汽車上坡和兩車碰撞的效果圖。6 結(jié)論本文介紹了物理引擎Havok、PhysX、Bullet、ODE和圖形引擎OGR
41、E、OSG的背景、功能、用法及其在工程仿真領(lǐng)域中的應(yīng)用,以及物理引擎和圖形引擎聯(lián)合應(yīng)用的方法。上述六個軟件都是開源的,用戶可以在其官方網(wǎng)站上免費下載它們的源程序及其相關(guān)資源。在國際游戲領(lǐng)域中廣泛應(yīng)用的物理引擎的排名依次為Havok、PhysX、Bullet、ODE1,但是,作者檢索和分析了中國知網(wǎng)的有關(guān)論文,發(fā)現(xiàn)在國內(nèi)工程仿真領(lǐng)域中應(yīng)用最廣泛的物理引擎恰是ODE和PhysX,遠(yuǎn)多于其它物理引擎,并且常常聯(lián)合應(yīng)用圖形引擎OGRE,應(yīng)用OGRE的遠(yuǎn)多于其它圖形引擎。工程仿真與游戲不同,不但要求實時、逼真,更要求精確模擬,所以它對物理引擎的要求更高,建立的物理模型要完全遵守物理定律,如運動學(xué)、動力學(xué)
42、等。當(dāng)物理引擎不能提供正確的物理模型時,需要加入合適的物理學(xué)方程。PhysX物理引擎的最大優(yōu)點是可以調(diào)用GPU進行物理模擬計算,充分利用GPU強大的并行和浮點計算能力,使得它可以進行復(fù)雜的物理模擬計算,例如流體模擬和柔性物體模擬等,并使游戲和工程仿真等實時、逼真和流暢。另一優(yōu)點是提供了最多的關(guān)節(jié)連接,包括固定、旋轉(zhuǎn)、球狀、棱柱、圓柱、滑輪、點線、點面和六自由度等關(guān)節(jié),可以模擬各種復(fù)雜物體的模型。PhysX的缺點是編程比較復(fù)雜,需耗費較多的人力和時間,對用戶來說,需要配置性能更好、價格更高的顯卡。在國內(nèi)工程仿真領(lǐng)域中應(yīng)用最廣泛的物理引擎ODE可以對剛體進行運動學(xué)、動力學(xué)仿真和碰撞等仿真,可以方便地與圖形引擎OGRE聯(lián)合應(yīng)用,并且有OG
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年級數(shù)學(xué)(上)計算題專項練習(xí)集錦
- 陜西藝術(shù)職業(yè)學(xué)院《新聞采編實務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西郵電職業(yè)技術(shù)學(xué)院《中外影視音樂賞析》2023-2024學(xué)年第二學(xué)期期末試卷
- 隨機事件福建省廈門市逸夫中學(xué)2025年初三十二月月考物理試題含解析
- 集美大學(xué)誠毅學(xué)院《生物啟發(fā)性材料》2023-2024學(xué)年第二學(xué)期期末試卷
- 青島工學(xué)院《光伏組件分析測試實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 青島市重點中學(xué)2024-2025學(xué)年初三畢業(yè)班第三次統(tǒng)測化學(xué)試題含解析
- 青島求實職業(yè)技術(shù)學(xué)院《文化差異與跨文化交際》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)美術(shù)透視速寫課件
- 青島遠(yuǎn)洋船員職業(yè)學(xué)院《品牌與消費研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年爆破作業(yè)人員培訓(xùn)考核必考題庫及答案
- 2024年江蘇省無錫市新吳區(qū)中考英語一模試題(含答案)
- 2024年浙江省嘉興市中考三模語文試卷
- 品牌聯(lián)合聲明書
- 信訪工作條例應(yīng)知應(yīng)會考試題庫300題(含答案)
- 工商業(yè)分布式光伏屋面勘察要點
- 2022教學(xué)能力大賽《智能網(wǎng)聯(lián)汽車傳感器測試與裝調(diào)》實施報告
- 2024年全球電動自行車銷量飆升
- 產(chǎn)業(yè)工人安全培訓(xùn)考試附有答案
- 中央八項規(guī)定精神解讀
- 鉤蟲病護理課件
評論
0/150
提交評論