周揚(yáng),劉永濤
(1.西安航空學(xué)院車(chē)輛工程系,西安710077;2.長(zhǎng)安大學(xué)汽車(chē)學(xué)院,西安710064)
基于OpenGL的事故三維綜合演示平臺(tái)
周揚(yáng)1,劉永濤2
(1.西安航空學(xué)院車(chē)輛工程系,西安710077;2.長(zhǎng)安大學(xué)汽車(chē)學(xué)院,西安710064)
利用3DMAX建模軟件與OpenGL圖形接口軟件對(duì)道路交通事故現(xiàn)場(chǎng)進(jìn)行三維重建,針對(duì)事故現(xiàn)場(chǎng)場(chǎng)景的渲染速度進(jìn)行優(yōu)化,生成參數(shù)化的現(xiàn)場(chǎng)環(huán)境,并通過(guò)漫游技術(shù)來(lái)提高系統(tǒng)的交互性。針對(duì)一起具體的交通事故進(jìn)行模擬演示,結(jié)果表明:該系統(tǒng)能夠?qū)?shí)際道路交通事故進(jìn)行準(zhǔn)確再現(xiàn)。
事故現(xiàn)場(chǎng);三維重建;渲染速度;參數(shù)化
近年來(lái),隨著我國(guó)汽車(chē)保有量的不斷增加,道路交通安全形勢(shì)日趨嚴(yán)峻,道路交通事故發(fā)生總數(shù)及其傷亡人數(shù)一直居于高位。在處理交通事故時(shí),通常是交警根據(jù)現(xiàn)場(chǎng)的痕跡或當(dāng)事人的口述經(jīng)過(guò)簡(jiǎn)單計(jì)算直接得出處理結(jié)果,其結(jié)果往往缺乏直觀(guān)性,易引起糾紛[1]。隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,目前能夠運(yùn)用計(jì)算機(jī)估計(jì)出事故發(fā)生前后車(chē)輛的速度、行駛軌跡等,再通過(guò)逼真的動(dòng)畫(huà)再現(xiàn)事故發(fā)生的整個(gè)場(chǎng)景與過(guò)程,使事故處理結(jié)果更具有說(shuō)服性[2]。
在針對(duì)一起具體交通事故進(jìn)行再現(xiàn)時(shí),為了了解事故發(fā)生的整個(gè)過(guò)程,往往需要從較遠(yuǎn)的視點(diǎn)來(lái)俯瞰整個(gè)事故場(chǎng)景,涉及的場(chǎng)景較大,模型數(shù)量較多。為了保證事故再現(xiàn)時(shí)具有良好的流暢性與交互性,本文研究了常見(jiàn)的事故場(chǎng)景漫游方法,創(chuàng)建了用于輔助處理的事故三維綜合演示平臺(tái),最后對(duì)一起真實(shí)交通事故進(jìn)行了成功再現(xiàn)。本研究主要采用3DMAX建模軟件建立三圍模型,并通過(guò)OpenGL圖形接口軟件將模型導(dǎo)入到VC++編程環(huán)境中實(shí)現(xiàn)可視化。
1.1場(chǎng)景快速渲染
為了逼真地再現(xiàn)事故現(xiàn)場(chǎng),使用3DMAX建模軟件對(duì)一般事故現(xiàn)場(chǎng)涵蓋的道路設(shè)施、植物及周邊環(huán)境進(jìn)行建模。3DMAX軟件具有強(qiáng)大的建模能力,利用其多邊形建模工具[4]可以快速地創(chuàng)建所需模型,并保證模型具有較高的精細(xì)度。然而,由于創(chuàng)建的模型邊數(shù)及定點(diǎn)數(shù)較多,在VC++編程環(huán)境中利用OpenGL圖形接口軟件對(duì)模型進(jìn)行大規(guī)模調(diào)用時(shí)存在渲染速度較慢的問(wèn)題。
編寫(xiě)程序?qū)?DMAX生成的3DS模型進(jìn)行讀取后,模型的頂點(diǎn)、多邊形、紋理等數(shù)據(jù)即被保存到專(zhuān)門(mén)的數(shù)組中[5],此時(shí)可采用兩種方式渲染模型:①即時(shí)模式,即時(shí)給出函數(shù)命令,OpenGL隨即采用給出的函數(shù)來(lái)繪制模型;②OpenGL顯示列表,函數(shù)命令被存儲(chǔ)到顯示列表中,當(dāng)需要渲染模型時(shí)即調(diào)用相應(yīng)的顯示列表,其中的OpenGL函數(shù)命令按順序被執(zhí)行。使用顯示列表的一個(gè)優(yōu)勢(shì)在于當(dāng)要多次在場(chǎng)景中渲染同一個(gè)復(fù)雜物體時(shí),系統(tǒng)只需計(jì)算一次該物體的頂點(diǎn)、三角形等信息,可顯著提高場(chǎng)景的渲染速度。
在對(duì)道路交通事故現(xiàn)場(chǎng)進(jìn)行建模時(shí),一般存在大量的模型(比如道路、隔離帶、道路設(shè)施等)需要被重復(fù)調(diào)用,如果使用即時(shí)模式進(jìn)行繪制,會(huì)由于大量的頂點(diǎn)計(jì)算而對(duì)計(jì)算機(jī)造成極大負(fù)擔(dān),場(chǎng)景的渲染速度將會(huì)受到嚴(yán)重影響[6]。而采用顯示列表則會(huì)大大加快其渲染速度,使事故演示更加流暢。在場(chǎng)景渲染時(shí)可采用圖1所示步驟。
圖1 場(chǎng)景渲染方式
1.2參數(shù)化建模技術(shù)
為了節(jié)省建模時(shí)間以及提高事故三維綜合演示平臺(tái)對(duì)于交通事故再現(xiàn)的通用性,對(duì)于任意一起交通事故,通過(guò)輸入相關(guān)參數(shù)如長(zhǎng)度、坡度等即可生成事故現(xiàn)場(chǎng)的具體場(chǎng)景。對(duì)于一起具體的交通事故,其發(fā)生的場(chǎng)景一般都涉及到道路以及道路周邊的地形環(huán)境。場(chǎng)景參數(shù)化建模[7]可通過(guò)以下方法實(shí)現(xiàn):
1.2.1道路的參數(shù)化建模
道路的常見(jiàn)類(lèi)型主要包括車(chē)道的數(shù)量,有兩車(chē)道、四車(chē)道等。道路的常見(jiàn)設(shè)施包括隔離帶、護(hù)欄、樹(shù)木等。
通過(guò)調(diào)用預(yù)先制作好的道路、隔離帶、護(hù)欄、樹(shù)木三維模型,存入顯示列表[8],連續(xù)調(diào)用相應(yīng)模型的顯示列表即可生成所需長(zhǎng)度的道路及其配套設(shè)施,而模型調(diào)用的次數(shù)則取決于所需道路的長(zhǎng)度。道路的參數(shù)化建模步驟如圖2所示。
圖2 道路參數(shù)化建模步驟
1.2.2地形的參數(shù)化建模
事故發(fā)生的現(xiàn)場(chǎng)地形一般較為復(fù)雜,有山巒也有平原。為了保證事故演示效果的流暢性,本研究通過(guò)分形算法繪制出所需的地形輪廓[9],采用紋理映射技術(shù)對(duì)地貌特征進(jìn)行表現(xiàn),最終得到渲染速度較快,且具有一定逼真度的事故現(xiàn)場(chǎng)場(chǎng)景。其具體方法如下:
1)采用分形方法生成地形。對(duì)山區(qū)進(jìn)行建模時(shí),由于山區(qū)地形存在隨機(jī)性、復(fù)雜性,可采取分形算法來(lái)生成三維地形輪廓[10-11]。首先對(duì)每個(gè)地形塊所在的平面高度進(jìn)行隨機(jī)賦值,山區(qū)地形或平緩或陡峭則取決于隨機(jī)量的范圍。然后對(duì)各個(gè)地形塊的間距進(jìn)行隨機(jī)賦值,山峰的密集程度則同樣取決于采用的隨機(jī)數(shù)范圍。
2)采用紋理映射技術(shù)對(duì)地貌特征進(jìn)行表現(xiàn)。地形模型建好后,使用OpenGL紋理映射技術(shù)將地形的高程數(shù)據(jù)傳遞到地形模型上[12],紋理映射技術(shù)將紋理圖片坐標(biāo)與地形模型的幾何坐標(biāo)一一對(duì)應(yīng)綁定,將紋理圖片映射到地形模型上,實(shí)現(xiàn)立體逼真的地貌效果。實(shí)現(xiàn)紋理映射需要通過(guò)2個(gè)步驟:①定義紋理,初始化并指定紋理圖片的映射方式;②紋理映射,說(shuō)明紋理坐標(biāo)與映射對(duì)象幾何坐標(biāo)的對(duì)應(yīng)關(guān)系。最終生成的地形效果如圖3、圖4所示。
圖3 較平緩的丘陵
圖4 較陡峭的山區(qū)
2.1場(chǎng)景漫游技術(shù)
為了增強(qiáng)事故演示時(shí)的交互性與沉浸感,本平臺(tái)通過(guò)視點(diǎn)控制技術(shù)實(shí)現(xiàn)了場(chǎng)景漫游[13]。OpenGL圖形接口中提供了工具函數(shù)gluLookAt()。該函數(shù)相當(dāng)于一臺(tái)攝影機(jī),在函數(shù)中可以指定攝影機(jī)的位置(視點(diǎn))、攝影機(jī)瞄準(zhǔn)的參考點(diǎn)(注視點(diǎn))以及攝影機(jī)的朝向。函數(shù)形式如下:
void gluLookAt(
GLdouble eyex,GLdouble eyey,GLdouble eyez,
GLdouble centerx,GLdouble centery,GLdouble centerz,
GLdouble upx,GLdouble upy,GLdouble upz)其中:eyex,eyey,eyez用來(lái)指定視點(diǎn)的位置;centerx,centery,centerz用來(lái)指定期望視線(xiàn)上的任意一點(diǎn)(即注視點(diǎn)),通常取觀(guān)測(cè)場(chǎng)景的中心;upx,upy,upz用來(lái)指定向上方向。
在虛擬場(chǎng)景中,漫游即相當(dāng)于視點(diǎn)在進(jìn)行運(yùn)動(dòng)[14],同樣也相當(dāng)于攝影機(jī)在運(yùn)動(dòng)。觀(guān)察者在場(chǎng)景中漫游時(shí)須考慮以下兩種情況:①當(dāng)觀(guān)察者在場(chǎng)景中前進(jìn)或后退時(shí),此時(shí)視點(diǎn)與注視點(diǎn)同時(shí)移動(dòng),視點(diǎn)與注視點(diǎn)坐標(biāo)值同時(shí)增大或減小;②當(dāng)觀(guān)察者在場(chǎng)景中轉(zhuǎn)向時(shí),此時(shí)視點(diǎn)應(yīng)固定,而注視點(diǎn)以視點(diǎn)為中心旋轉(zhuǎn)進(jìn)行圓周運(yùn)動(dòng)。在鍵盤(pán)消息函數(shù)中定義相應(yīng)的操作,如前進(jìn)、后退、轉(zhuǎn)向等,根據(jù)具體操作來(lái)改變視點(diǎn)和注視點(diǎn)的參數(shù)值即可實(shí)現(xiàn)場(chǎng)景漫游功能。
2.2演示動(dòng)畫(huà)實(shí)現(xiàn)
對(duì)于一起具體的交通事故進(jìn)行事故再現(xiàn),最終要生成事故演示動(dòng)畫(huà)。動(dòng)畫(huà)實(shí)現(xiàn)[15]的基本原理是利用人眼的視覺(jué)殘留特性而以一定的速度播放靜止的畫(huà)面(幀),這些畫(huà)面在人眼中形成了連續(xù)運(yùn)動(dòng)的效果。畫(huà)面的播放速度不能過(guò)慢也不能過(guò)快,過(guò)慢會(huì)使得動(dòng)畫(huà)不夠平滑、流暢,過(guò)快則導(dǎo)致人眼不能及時(shí)反應(yīng),一般播放速度應(yīng)大于24幀/s。計(jì)算機(jī)在實(shí)現(xiàn)動(dòng)畫(huà)時(shí)可以采用“畫(huà)—擦—畫(huà)”的技術(shù),即畫(huà)好一幅圖后,將其擦掉,緊接著再畫(huà)另一幅圖,這樣當(dāng)擦除圖畫(huà)達(dá)到一定的頻率時(shí)就形成了連續(xù)的動(dòng)畫(huà)。
在OpenGL中,可利用雙緩存技術(shù)[16]來(lái)實(shí)現(xiàn)上述的“畫(huà)—擦—畫(huà)”方式。該技術(shù)在顯存中開(kāi)辟兩塊完整的顏色緩沖區(qū),在一個(gè)緩沖區(qū)中進(jìn)行圖形的繪制,在另一個(gè)緩沖區(qū)中進(jìn)行圖形的顯示。當(dāng)一幀圖畫(huà)繪制完成后,兩個(gè)緩沖區(qū)進(jìn)行交換,然后剛才用來(lái)繪圖的緩沖區(qū)被用來(lái)進(jìn)行顯示,而用來(lái)顯示的緩沖區(qū)則用于繪圖。通過(guò)這樣的交換使繪制的圖形達(dá)到動(dòng)畫(huà)效果,并使效率大大提高。利用雙緩存技術(shù)實(shí)現(xiàn)動(dòng)畫(huà)需要建立一個(gè)系統(tǒng)時(shí)鐘及相應(yīng)的驅(qū)動(dòng)機(jī)制,時(shí)鐘可使得系統(tǒng)每隔一段時(shí)間就驅(qū)動(dòng)緩存進(jìn)行交換,這樣即可形成流暢的動(dòng)畫(huà)。
使用所建平臺(tái)對(duì)發(fā)生于2012年8月26日的延安“8.26”特大交通事故進(jìn)行場(chǎng)景構(gòu)建。通過(guò)輸入相應(yīng)的現(xiàn)場(chǎng)數(shù)據(jù)生成事故現(xiàn)場(chǎng)道路以及地形,導(dǎo)入相應(yīng)車(chē)輛模型以及計(jì)算得出的車(chē)輛運(yùn)行軌跡數(shù)據(jù),最終得到事故演示的關(guān)鍵幀,如圖5所示。通過(guò)鍵盤(pán)操作移動(dòng)視點(diǎn)并改變觀(guān)察的位置和角度,其效果如圖6所示。
圖5 事故關(guān)鍵幀
圖6 變換視點(diǎn)后效果
本文綜合運(yùn)用3DMAX與OpenGL建立事故三維綜合演示平臺(tái),對(duì)于場(chǎng)景渲染速度進(jìn)行優(yōu)化,使演示效果更加流暢,參數(shù)化生成事故現(xiàn)場(chǎng)道路以及周邊環(huán)境,使得演示平臺(tái)實(shí)用性得到增強(qiáng)。在此基礎(chǔ)上通過(guò)漫游來(lái)提升交互性,利用雙緩存技術(shù)實(shí)現(xiàn)事故動(dòng)畫(huà)的流暢演示。實(shí)際案例表明本平臺(tái)可以滿(mǎn)足事故再現(xiàn)的相關(guān)要求,能夠?yàn)槭鹿守?zé)任判定提供更為充實(shí)的依據(jù)。
[1]馬社強(qiáng),薛菁菁.我國(guó)道路交通事故責(zé)任認(rèn)定理論和方法發(fā)展綜述[J].中國(guó)人民公安大學(xué)學(xué)報(bào):自然科學(xué)版,2013,(3):27-30.
[2]張偉,李一兵,胡遠(yuǎn)志.基于OpenGL的交互式虛擬三維事故場(chǎng)景構(gòu)建[J].公路交通科技,2003,20(2):108 -110.
[3]肖瀟,朱大明,夏蓉.基于OpenGL的火災(zāi)模型構(gòu)建的研究與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2012,12(5):1090 -1093.
[4]包欣,王諾.基于3DMAX的三維虛擬校園建模的方法研究[J].數(shù)字技術(shù)與應(yīng)用,2012(12):56-56.
[5]康鳳娥,孔令德.MFC框架下3DS模型接口的研究與實(shí)現(xiàn)[J].山西師范大學(xué)學(xué)報(bào):自然科學(xué)版,2013,27(1):43-48.
[6]劉鵬程,何宗宜,楊幫會(huì).利用OpenGL顯示列表技術(shù)實(shí)現(xiàn)GIS對(duì)象的符號(hào)化[J].測(cè)繪信息與工程,2005,30(6):26-27.
[7]紀(jì)振海,段建中,谷計(jì)劃.基于OpenGL的漸開(kāi)線(xiàn)弧齒錐齒輪三維參數(shù)化建模[J].工程設(shè)計(jì)學(xué)報(bào),2009,16(6):432-435.
[8]阮宇智,楊欽,金宇林.基于OpenGL顯示列表的三維地質(zhì)體模型快速顯示算法[J].石油工業(yè)計(jì)算機(jī)應(yīng)用,2006,14(3):20-23.
[9]鄭佳榮,王強(qiáng),占文鋒.三維建模方法研究現(xiàn)狀綜述[J].北京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013,12(4):5-7.
[10]王芳,李壯志,鄭卉卉.OpenGL和分形算法在地形繪制中的應(yīng)用[J].微計(jì)算機(jī)信息,2007,23(1-3):312 -314.[11]黃斌.基于圖像超分辨率三維幾何建模技術(shù)[J].重慶理工大學(xué)學(xué)報(bào):自然科學(xué)版,2013,27(3):85-90.
[12]馬甜甜,段錦,祝勇,等.OpenGL中模擬目標(biāo)與實(shí)時(shí)場(chǎng)景的融合技術(shù)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(3):205 -208.
[13]曹丹丹,朱彩英,劉曉春.基于碰撞檢測(cè)的交互式三維場(chǎng)景漫游系統(tǒng)研究與實(shí)現(xiàn)[J].測(cè)繪通報(bào),2014,(2):97-100.
[14]常洪強(qiáng),劉爽,李國(guó)超.基于OpenGL的3DS文件解析及視點(diǎn)移動(dòng)和三維選擇的實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2011,19(20):14-17.
[15]莊建東,曾勇進(jìn).計(jì)算機(jī)動(dòng)畫(huà)處理技術(shù)及方法[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(9):203-205.
[16]宋永軍,蘇鴻根.VC環(huán)境下OpenGL動(dòng)畫(huà)的實(shí)現(xiàn)方式與特性分析[J].計(jì)算機(jī)應(yīng)用與軟件,2004,21(4):102 -103.
(責(zé)任編輯楊黎麗)
Research About Three-Dimensional Demonstration Platform About Accidents Based on OpenGL
ZHOU Yang1,LIU Yong-tao2
(1.Department of Vehicle Engineering,Xi'an Aeronautical University,Xi'an 710077,China;2.School of Automobile,Chang'an University,Xi'an 710064,China)
Using the modeling software 3DMAX and the graphical interface OpenGL,the scene of road traffic accidents in three-dimension was reconstructed.The optimization of rendering speed of the road traffic accidents scene was studied and parameterized generation of the accident scene was obtained.Then the interaction of system by using roaming technology was improved.At last,this system was used to simulate a specific accident and the result turns out that it can be used for accurate reconstruction for actual road traffic accidents.
the scene of accident;three-dimensional reconstruction;rendering speed;parameterization
TP206
A
1674-8425(2015)04-0077-04
10.3969/j.issn.1674-8425(z).2015.04.015
2015-01-12
國(guó)家自然科學(xué)基金資助項(xiàng)目(51278062);西安航空學(xué)院校級(jí)研究項(xiàng)目(2014KY1208)
周揚(yáng)(1989—),男,陜西漢中人,助教,碩士,主要從事道路交通安全研究。
周揚(yáng),劉永濤.基于OpenGL的事故三維綜合演示平臺(tái)[J].重慶理工大學(xué)學(xué)報(bào):自然科學(xué)版,2015(4):77 -80.
format:ZHOU Yang,LIU Yong-tao.Research About Three-Dimensional Demonstration Platform About Accidents Based on OpenGL[J].Journal of Chongqing University of Technology:Natural Science,2015(4):77-80.