劉榮華,溫垚珂,閆文敏,劉蘇蘇
(1. 南京理工大學(xué)機(jī)械工程學(xué)院,江蘇 南京 210094;2. 瞬態(tài)沖擊技術(shù)國(guó)防科技重點(diǎn)實(shí)驗(yàn)室,北京 102202;3. 中國(guó)兵器工業(yè)第208研究所,北京 102202;4. 南通大學(xué)機(jī)械工程學(xué)院,江蘇 南通 226019)
人體易損性評(píng)估軟件可以快速評(píng)估各類殺傷元對(duì)人體靶標(biāo)的殺傷效應(yīng),結(jié)合具體作戰(zhàn)任務(wù)還可評(píng)估人員的失能情況。為了在軟件界面快速直觀地再現(xiàn)槍彈侵徹過程及其在人體靶標(biāo)內(nèi)造成的瞬時(shí)空腔膨脹過程,就需要結(jié)合相應(yīng)終點(diǎn)彈道理論模型數(shù)據(jù),在軟件中虛擬再現(xiàn)侵徹過程。目前,對(duì)基于各類外彈道方程的槍彈和導(dǎo)彈飛行過程虛擬再現(xiàn)技術(shù)研究較多,對(duì)槍彈終點(diǎn)彈道的虛擬再現(xiàn)技術(shù)罕有文獻(xiàn)報(bào)道[1]。
張進(jìn)強(qiáng)等人[3]通過構(gòu)建OpenGL的三維視景仿真環(huán)境,實(shí)現(xiàn)了基于數(shù)值仿真實(shí)時(shí)驅(qū)動(dòng)的彈道可視化仿真平臺(tái),對(duì)炮彈的飛行軌跡、實(shí)時(shí)運(yùn)動(dòng)姿態(tài)進(jìn)行了仿真和分析。吳楓等人[4]利用虛擬現(xiàn)實(shí)技術(shù)、數(shù)據(jù)可視化技術(shù)等,構(gòu)建了一個(gè)航天發(fā)射可視化仿真平臺(tái),并開展了相應(yīng)可視化仿真應(yīng)用案例。薛志斌等人[5]為降低工作量,通過專業(yè)三位建模軟件3DS MAX建立模型,并用C++語言將3DS文件導(dǎo)入OpenGL中,實(shí)現(xiàn)可視化以及人機(jī)交互控制。程翔等人[6]對(duì)六自由度算法模型進(jìn)行了改進(jìn),實(shí)現(xiàn)了導(dǎo)彈六自由度彈道三維仿真,該仿真能夠真實(shí)可靠并且清晰直觀的反映導(dǎo)彈的六自由度彈道特性,其可視化效果良好。文雷[7]利用計(jì)算機(jī)圖形技術(shù),構(gòu)造導(dǎo)彈的三維模型并通過快速載入實(shí)體模型的方法載入OpenGL,最終實(shí)現(xiàn)了導(dǎo)彈飛行仿真,為導(dǎo)彈飛行軌跡研究提供了一種直觀、便捷的仿真分析方法。
目前,已有研究大都針對(duì)三維模型實(shí)時(shí)位移、旋轉(zhuǎn)實(shí)現(xiàn)了仿真[8],[9],但侵徹過程中的瞬時(shí)空腔是一個(gè)形狀實(shí)時(shí)變化的三維模型,動(dòng)態(tài)變形特點(diǎn)給傷道仿真帶來困難。本文基于OpenGL設(shè)計(jì)了槍彈侵徹仿真程序,程序可以實(shí)現(xiàn)對(duì)槍彈侵徹全過程的三維可視化。通過引入阻力系數(shù)和升力系數(shù),建立槍彈運(yùn)動(dòng)和瞬時(shí)空腔運(yùn)動(dòng)模型。經(jīng)過與實(shí)驗(yàn)對(duì)比發(fā)現(xiàn)模型具有良好的準(zhǔn)確性。依據(jù)模型,獲取侵徹過程槍彈運(yùn)動(dòng)與空腔變形的實(shí)時(shí)數(shù)據(jù),設(shè)計(jì)算法實(shí)現(xiàn)對(duì)子彈運(yùn)動(dòng)和空腔運(yùn)動(dòng)的可視化仿真,為動(dòng)態(tài)變形的三維模型仿真提供了一些參考。
在槍彈侵徹明膠過程中,槍彈的受力主要隨槍彈與明膠有效接觸面積變化,其中面積分離率和彈頭長(zhǎng)徑比是描述有效接觸面積的重要因素。劉蘇蘇[8]通過分析侵徹過程中的不同方向受力,提出了阻力系數(shù)和升力系數(shù)與翻轉(zhuǎn)角的關(guān)系式,從而建立步槍彈在明膠中的運(yùn)動(dòng)模型和瞬時(shí)空腔運(yùn)動(dòng)模型。
當(dāng)槍彈以非零度攻角侵徹明膠時(shí),槍彈在明膠中的運(yùn)動(dòng)可以分為:質(zhì)點(diǎn)平動(dòng)和繞質(zhì)心的轉(zhuǎn)動(dòng)[11]-[13]。隨著槍彈翻轉(zhuǎn)角的增加,槍彈與明膠的有效接觸面積增大,因而槍彈不斷受到一個(gè)翻滾力矩的作用;與此同時(shí),槍彈翻轉(zhuǎn)過程中,槍彈尾部會(huì)受到明膠的阻礙作用,從而形成一個(gè)阻尼力矩,始終阻礙槍彈的翻轉(zhuǎn)。結(jié)合這兩個(gè)在槍彈上作用相反的力矩,建立方程(1)。
質(zhì)點(diǎn)平動(dòng)中受力分為水平方向的阻力和豎直方向的升力。關(guān)于阻力,通過引入空氣動(dòng)力學(xué)中的阻力系數(shù),建立阻力模型。阻力的大小主要取決于有效接觸面積的大小。根據(jù)槍彈在明膠中翻轉(zhuǎn)的角度,可將翻轉(zhuǎn)分為三個(gè)階段即窄傷道段、快速翻轉(zhuǎn)階段、阻尼振蕩階段,并分別建立有效接觸面積與翻轉(zhuǎn)角的關(guān)系方程。結(jié)合升力的作用,引入升力系數(shù)最終建立方程(2)(3)(4)。
(1)
(2)
(3)
圖1圖2是以上理論模型與實(shí)驗(yàn)結(jié)果的對(duì)比。從圖中可以看出,理論模型得到的數(shù)據(jù)與實(shí)驗(yàn)結(jié)果重合度很好,這表明該理論模型能夠較為準(zhǔn)確的反映侵徹過程。
圖1 侵徹深度隨時(shí)間變化曲線
圖2 翻轉(zhuǎn)角度隨時(shí)間變化曲線
取明膠深度S處,軸向厚度為ds的截面為研究對(duì)象,依據(jù)動(dòng)能定理計(jì)算得到彈頭在該截面釋放的能量dEs。當(dāng)該截面空腔膨脹至最大時(shí),認(rèn)為截面動(dòng)能為0,變形能量最大,且該層明膠具有最大能量dEp。考慮到由于攻角的存在,彈頭會(huì)出現(xiàn)翻滾現(xiàn)象,明膠分層之間存在能量交換,分層能量不守恒,即dEs≠dEp。通過假設(shè)分層之間的能量交換與彈頭釋放能量和所有截面中彈頭最大釋放能量的差值正相關(guān),建立明膠截面的最大變形能與彈頭釋放能量的關(guān)系表達(dá)式。又考慮彈頭翻轉(zhuǎn)帶來的影響,引入彈頭有效接觸面積和明膠粘彈性的影響,表示截面變形能和動(dòng)能之間的關(guān)系。最終瞬時(shí)空腔運(yùn)動(dòng)模型如下
(4)
圖3是是以上理論模型與實(shí)驗(yàn)結(jié)果的對(duì)比(某7.62mm槍彈,入靶速度701m/s)。從圖中可以看出,理論模型可以很好地模擬空腔從開始膨脹到閉合運(yùn)動(dòng)過程的空腔輪廓。
圖3 理論模型結(jié)果與實(shí)驗(yàn)結(jié)果典型時(shí)刻對(duì)比[8]
OpenGL庫一般包含兩個(gè)基本庫,一個(gè)用來實(shí)現(xiàn)開窗,另一個(gè)管理OpenGL函數(shù)指針[1][2]。實(shí)現(xiàn)這兩個(gè)功能的庫有很多。采用當(dāng)前成熟、穩(wěn)定的GLFW、GLEW庫?;经h(huán)境的搭建需要將這兩個(gè)庫加載、驅(qū)動(dòng),其中初始化的關(guān)鍵語句如下:
表1 OpenGL初始化關(guān)鍵語句
OpenGL渲染模型的過程,是由CPU對(duì)模型數(shù)據(jù)(頂點(diǎn)、法線、紋理)進(jìn)行讀取、處理,再將數(shù)據(jù)傳遞至GPU進(jìn)行渲染顯示。對(duì)于復(fù)雜的幾何模型,手動(dòng)輸入模型的頂點(diǎn)、法線和紋理坐標(biāo)數(shù)據(jù)是極為困難的,其效率也較低。模型加載可以將建立好的幾何模型導(dǎo)入程序之中,極大提高了復(fù)雜場(chǎng)景可視化的效率。
在3dmax軟件中,畫出槍彈彈頭的幾何模型,保存為obj格式文件。利用ASSIMP模型加載庫將子彈模型加載到程序之中。在OpenGL中,模型的幾何數(shù)據(jù)以矩陣的形式進(jìn)行操作,模型的幾何變換是由矩陣乘以相應(yīng)的變換向量、矩陣實(shí)現(xiàn)的。GLM是一個(gè)專門為OpenGL量身定做的數(shù)學(xué)庫,該庫可以幫助得到幾何變換相應(yīng)的矩陣。
利用函數(shù)glm∷mat4建立一個(gè)單位矩陣,通過glm∷translate、glm∷scale、glm∷rotate函數(shù)對(duì)單位矩陣進(jìn)行變換,得到平移、縮放、旋轉(zhuǎn)的變換矩陣。其中g(shù)lm∷rotate()函數(shù)需要一個(gè)向量作為自變量,幾何模型會(huì)以該向量作為旋轉(zhuǎn)軸進(jìn)行旋轉(zhuǎn)。這個(gè)旋轉(zhuǎn)軸向量的起點(diǎn)為子彈質(zhì)心,方向與旋轉(zhuǎn)平面垂直。而子彈在做平移時(shí),質(zhì)心會(huì)不斷變化,使該旋轉(zhuǎn)向量需要不斷隨之變化。為解決該問題,使用一個(gè)函數(shù),因變量是初始旋轉(zhuǎn)軸向量和質(zhì)心動(dòng)態(tài)坐標(biāo),函數(shù)返回一個(gè)不斷隨著質(zhì)心平移的旋轉(zhuǎn)軸向量。
子彈的運(yùn)動(dòng)分為質(zhì)心的平動(dòng)和繞質(zhì)心的旋轉(zhuǎn),由運(yùn)動(dòng)方程求解,得到子彈隨時(shí)間的位移和翻轉(zhuǎn)角度數(shù)據(jù)。將子彈的位移值和翻轉(zhuǎn)角度數(shù)據(jù),作為變換矩陣的變換量,隨時(shí)間不斷切換到對(duì)應(yīng)的值。最終實(shí)現(xiàn)子彈模型的運(yùn)動(dòng)可視化效果。圖4是子彈典型時(shí)刻姿態(tài)與實(shí)驗(yàn)對(duì)比圖,從圖中可以看出,通過程序?qū)崿F(xiàn)的子彈運(yùn)動(dòng)可視化效果與實(shí)驗(yàn)中較為符合。
圖4 子彈典型時(shí)刻姿態(tài)與實(shí)驗(yàn)對(duì)比圖
圖4中,a:實(shí)驗(yàn)高速攝影拍攝的子彈在明膠中運(yùn)動(dòng)過程,b:槍彈侵徹過程可視化效果。
目前OpenGL渲染圖形,主要應(yīng)用于不變化模型的渲染,而對(duì)實(shí)時(shí)變換形狀的模型渲染少有應(yīng)用。瞬時(shí)空腔是一個(gè)典型的幾何形狀隨時(shí)間不斷變換的模型,傳統(tǒng)的方式難以處理。OpenGL渲染的基礎(chǔ)圖元是三角形,將瞬時(shí)空腔劃分為有限多個(gè)三角形,并實(shí)時(shí)變換三角形的數(shù)據(jù),最終實(shí)現(xiàn)瞬時(shí)空腔運(yùn)動(dòng)的渲染動(dòng)畫。算法原理如圖5所示。
圖5 依據(jù)數(shù)據(jù)渲染空腔原理圖
圖6是槍彈侵徹明膠數(shù)值計(jì)算結(jié)果中,垂直彈道一截面典型時(shí)刻的等效應(yīng)力圖[14]。從圖中可以看出,在垂直侵徹方向,瞬時(shí)空腔的形狀可以看作一個(gè)圓。為此,將瞬時(shí)空腔視作沿著侵徹深度排列的一系列圓組成,這些圓的位置和大小都會(huì)隨時(shí)間變化。將每一時(shí)刻的空腔分為一系列圓,通過方程求解,可以獲得這一系列圓的圓心位置和半徑。
圖6 空腔一截面等效應(yīng)力圖[14]
如圖7a所示,在一系列圓上取點(diǎn),再?gòu)南噜弮蓚€(gè)圓上取四個(gè)點(diǎn)如圖7b所示,由這四個(gè)點(diǎn)分別組成兩個(gè)互補(bǔ)為矩形的三角形。沿著圓上對(duì)所有點(diǎn)進(jìn)行以上操作,即可將兩個(gè)圓之間,由三角形進(jìn)行縫補(bǔ),最終形成一個(gè)圓臺(tái)的形狀。對(duì)沿著侵徹深度的所有圓進(jìn)行以上操作,最終可以獲得空腔的形狀。依照以上原理,將空腔沿著侵徹深度方向劃分為50個(gè)圓,每個(gè)圓上取8個(gè)點(diǎn)。為確定每個(gè)點(diǎn)的頂點(diǎn)三維坐標(biāo),對(duì)一系列圓心位移、半徑數(shù)據(jù)進(jìn)行以下處理
圖7 圓上選取三角形頂點(diǎn)
Xi=X0;
(5)
Yi=Y0+R*sin(i*2pi/n);
(6)
Zi=R*cos(i*2pi/n);
(7)
X0、Y0、Z0=0是圓心的坐標(biāo),R是圓半徑,Xi、Yi、Zi是圓上第i個(gè)點(diǎn)的坐標(biāo),n是在圓上劃分點(diǎn)的個(gè)數(shù)。建立一個(gè)循環(huán)將沿著圓上各點(diǎn)坐標(biāo)求得,放入數(shù)組。(OpenGL坐標(biāo)系遵循右手定則,在屏幕上向右為X正方向,向上為Y正方向,垂直屏幕向里是Z正方向)
OpenGL中渲染三角形,頂點(diǎn)數(shù)據(jù)需要按照逆時(shí)針三角形的順序排列。按照如圖7b的順序?qū)⑺许旤c(diǎn)排序從新放入數(shù)組。根據(jù)理論模型求解每一時(shí)刻的空腔數(shù)據(jù)較為繁瑣,因此只選取10個(gè)時(shí)間間隔相同的典型空腔數(shù)據(jù),并通過對(duì)數(shù)據(jù)進(jìn)行插值計(jì)算,得到豐富的數(shù)據(jù),來驅(qū)動(dòng)可視化仿真,以保證畫面的流暢性和變形過程清晰的展現(xiàn)。最后將該數(shù)組作為頂點(diǎn)數(shù)據(jù)傳遞至GPU進(jìn)行渲染。
經(jīng)過對(duì)算法的測(cè)試,結(jié)果表明,該算法可以很好的呈現(xiàn)空腔的動(dòng)態(tài)變形過程。截取典型時(shí)刻的空腔形狀,如圖8。
圖8 典型時(shí)刻空腔形狀
依據(jù)上述子彈運(yùn)動(dòng)模型和瞬時(shí)空腔運(yùn)動(dòng)模型,以某7.62mm槍彈為例,使用Matlab對(duì)微分方程組求解獲取數(shù)據(jù)。結(jié)合C++語言編寫的侵徹過程可視化程序,實(shí)現(xiàn)槍彈侵徹明膠的可視化,從而更快速直觀的觀察侵徹發(fā)生過程中的現(xiàn)象。
初始條件為:X方向位移為0,Y方向位移為0,偏轉(zhuǎn)角為0,X方向速度為700m/s,Y方向速度為36.678 m/s,偏轉(zhuǎn)角速度為0。
圖9是通過可視化程序?qū)崿F(xiàn)的槍彈侵徹明膠場(chǎng)景,并和實(shí)驗(yàn)照片進(jìn)行了對(duì)比。從圖中可以看出空腔的形狀與實(shí)驗(yàn)高速攝影相似,可以較為真實(shí)地展示空腔的變形過程。經(jīng)過驗(yàn)證,設(shè)計(jì)的算法可以將子彈侵徹明膠過程中空腔的動(dòng)態(tài)變形完整的呈現(xiàn)。利用該程序可以進(jìn)行各種初始條件的仿真,形象地預(yù)測(cè)傷道的形狀,為后續(xù)將其投影到人體上進(jìn)行不同位置損傷評(píng)估有重要支撐作用。
圖9 可視化空腔與實(shí)驗(yàn)典型時(shí)刻對(duì)比圖
1)建立的槍彈侵徹明膠運(yùn)動(dòng)方程可以較準(zhǔn)確的描述槍彈侵徹過程中槍彈在明膠內(nèi)的侵徹深度和翻滾角度變化歷程。
2)建立的明膠內(nèi)瞬時(shí)空腔運(yùn)動(dòng)方程可以較準(zhǔn)確描述明膠內(nèi)瞬時(shí)空腔的形狀輪廓隨時(shí)間和空腔的演化過程。
3)基于OpenGL技術(shù)開發(fā)的傷道可視化軟件可以快速直觀的再現(xiàn)槍彈侵徹人體模擬靶標(biāo)過程中傷道的形成過程,為人體易損性評(píng)估軟件提供準(zhǔn)確的人體損傷數(shù)據(jù)。