黃 斌
(海軍工程大學(xué) 動(dòng)力工程學(xué)院,湖北 武漢 430033)
基于OpenGL的螺旋槳幾何造型程式化實(shí)現(xiàn)
黃 斌
(海軍工程大學(xué) 動(dòng)力工程學(xué)院,湖北 武漢 430033)
介紹通過螺旋槳設(shè)計(jì)圖紙?zhí)峁┑男椭禂?shù)據(jù)等進(jìn)行螺旋槳三維幾何建模的方法。利用VC++6.0編制了適合于各種類型螺旋槳的三維幾何建模程序,并借助OpenGL技術(shù)實(shí)現(xiàn)了三維螺旋槳造型及其尾渦面的顯示與人機(jī)交互功能,提高了螺旋槳三維幾何建模的效率。研究中所進(jìn)行的對(duì)槳葉、尾渦面以及槳轂面元網(wǎng)格的計(jì)算也為螺旋槳水動(dòng)力數(shù)值預(yù)報(bào)提供了基礎(chǔ)。
螺旋槳;OpenGL;MFC;三維;面元網(wǎng)格生成
螺旋槳是船舶推進(jìn)中的最重要部件。在螺旋槳論證、設(shè)計(jì)階段經(jīng)常要獲得三維幾何造型并對(duì)其水動(dòng)力性能進(jìn)行數(shù)值預(yù)報(bào)。隨著船舶推進(jìn)技術(shù)的不斷發(fā)展,結(jié)構(gòu)復(fù)雜、性能優(yōu)良的螺旋槳的種類也越來越多,對(duì)于這些螺旋槳,將其三維建模過程程序化、通用化,有利于提高螺旋槳的設(shè)計(jì)效率。本文經(jīng)過對(duì)螺旋槳幾何造型的分析,以VC++6.0和OpenGL為工具,建立了螺旋槳三維幾何造型程序,對(duì)于任意種類的螺旋槳,設(shè)計(jì)參數(shù)確定以后,即可利用該程序?qū)ζ淙S幾何造型以及尾渦面進(jìn)行三維圖形化顯示,并對(duì)其進(jìn)行人機(jī)交互仿真。
根據(jù)螺旋槳構(gòu)造原理可知,決定螺旋槳幾何造型的主要參數(shù)是:槳盤面直徑、葉切面的直徑、葉切面的型值(包括壓力面的型值和吸力面的型值)、葉切面的螺距和螺旋槳的旋向。對(duì)于側(cè)斜槳還應(yīng)包括各個(gè)葉切面的側(cè)斜、縱斜相關(guān)參數(shù)。在螺旋槳設(shè)計(jì)圖紙中,各個(gè)葉切面的數(shù)據(jù)以二維形式給出。葉切面數(shù)據(jù)由二維至三維的轉(zhuǎn)換過程如圖1所示[1]。
可見,螺旋槳葉切面的變化經(jīng)歷了旋轉(zhuǎn)螺距角、移側(cè)斜、移縱斜以及包覆等過程。包覆是將旋轉(zhuǎn)螺距角、移側(cè)斜和縱斜后的葉切面“包覆”在與該葉切面等直徑的圓柱體上。螺旋槳二維葉切面數(shù)據(jù)換算為三維葉切面數(shù)據(jù)的計(jì)算公式如下:
為了實(shí)現(xiàn)螺旋槳三維建模程序化,需要建立數(shù)據(jù)庫來儲(chǔ)存螺旋槳設(shè)計(jì)參數(shù)。本文選擇用Excel存儲(chǔ)螺旋槳數(shù)據(jù)文件,當(dāng)然還可以選擇Access等軟件進(jìn)行數(shù)據(jù)存儲(chǔ),通過VC++編程實(shí)現(xiàn)數(shù)據(jù)的讀取。存儲(chǔ)數(shù)據(jù)時(shí),在數(shù)據(jù)文件中對(duì)每個(gè)參數(shù)項(xiàng)目加上標(biāo)識(shí)以進(jìn)行分類存儲(chǔ)。為了使程序達(dá)到通用的目的,在數(shù)據(jù)庫中建立測(cè)斜和縱斜參數(shù)數(shù)據(jù)項(xiàng)目,對(duì)于無側(cè)斜和縱斜的螺旋槳,該數(shù)據(jù)項(xiàng)目的數(shù)據(jù)為0。這樣,數(shù)據(jù)庫可以適用于所有類型的螺旋槳。數(shù)據(jù)庫的存儲(chǔ)如圖2所示。
螺旋槳三維數(shù)據(jù)的計(jì)算包括槳葉面數(shù)據(jù)的計(jì)算、尾渦面數(shù)據(jù)的計(jì)算以及槳轂數(shù)據(jù)的計(jì)算。
槳葉三維坐標(biāo)計(jì)算實(shí)際上是二維數(shù)據(jù)到三維數(shù)據(jù)的換算問題。螺旋槳設(shè)計(jì)圖紙?zhí)峁┑娜~切面參數(shù)較少,一般是10~20個(gè)葉切面。為了三維建模時(shí)圖形更逼近真實(shí)形狀,利用B樣條函數(shù)對(duì)槳參數(shù)進(jìn)行插值擴(kuò)充。增加槳葉的葉切面,每個(gè)葉切面上吸力面和壓力面也分別利用B樣條函數(shù)進(jìn)行插值增加數(shù)據(jù)。利用VC++編程實(shí)現(xiàn)葉切面旋轉(zhuǎn)螺距角、移側(cè)斜、移縱斜以及包覆的過程。得到三維的葉片表面數(shù)據(jù)。槳葉數(shù)據(jù)處理中的幾個(gè)關(guān)鍵問題如下:
1)螺旋槳設(shè)計(jì)圖紙?zhí)峁┑娜~切面的數(shù)據(jù)分布方式有2種:一種是由隨邊開始至導(dǎo)邊結(jié)束;另一種是由導(dǎo)邊開始至隨邊結(jié)束。在程序中槳葉切面數(shù)據(jù)結(jié)構(gòu)統(tǒng)一轉(zhuǎn)化為第一種分布方式,即由隨邊開始至導(dǎo)邊結(jié)束,而且壓力面朝下、吸力面朝上。即轉(zhuǎn)化后的葉切面在坐標(biāo)中的位置是:隨邊在原點(diǎn)處,如圖3所示。這可以簡(jiǎn)化后續(xù)的三維數(shù)據(jù)計(jì)算。在程序運(yùn)行過程中,由用戶指定螺旋槳設(shè)計(jì)圖紙?zhí)峁┑娜~切面的數(shù)據(jù)分布。
2)螺旋槳依旋轉(zhuǎn)方向可分為左旋槳和右旋槳,由于槳葉切面已經(jīng)轉(zhuǎn)化為圖3所示的數(shù)據(jù)分布,經(jīng)過簡(jiǎn)單分析可知,該數(shù)據(jù)分布表示的是右旋槳。若原螺旋槳為左旋槳,則只需要將經(jīng)過移側(cè)斜、轉(zhuǎn)螺距角后的葉切面沿圖3所示的y軸進(jìn)行鏡像變換即可。在程序運(yùn)行過程中,由用戶指定螺旋槳的旋向。
則各葉切面的螺距P為:
式中:r為葉切面半徑,P0為葉切面初始螺距。
由螺旋槳理論可知,理想狀態(tài)下,螺旋槳的尾渦面由無窮多條螺旋線組成,由隨邊開始,延伸至船后無窮遠(yuǎn)處。每條螺旋線的螺距與對(duì)應(yīng)葉切面的螺距相等,而且經(jīng)過該葉切面的2個(gè)端點(diǎn),由以上2個(gè)條件可以唯一確定與葉切面對(duì)應(yīng)的螺旋線。螺旋線的方程為:
式中:a為螺旋線所在圓柱的半徑,ω為螺旋線繞圓柱旋轉(zhuǎn)的角速度,v為螺旋線沿圓柱徑向的速度,φ0為初始相位角。根據(jù)式(4),只要確定v/ω,就可以唯一確定一族等螺距的螺旋線,螺距為v/aω,然后根據(jù)葉切面的2個(gè)端點(diǎn)確定初始相位φ0,即可唯一確定對(duì)應(yīng)于葉切面的螺旋線。各個(gè)葉切面對(duì)應(yīng)的螺旋線就構(gòu)成了螺旋槳的尾渦面。本文利用VC++編程計(jì)算對(duì)應(yīng)于每個(gè)葉切面的螺旋線的三維坐標(biāo)。
槳轂由與葉根剖面所在圓柱體近似表示,槳轂的長(zhǎng)度取為槳葉軸向最大寬度的1.5倍。槳轂表面根據(jù)相鄰葉片的葉根剖面分隔為N個(gè)單元,N為螺旋槳葉片數(shù)。最后對(duì)每個(gè)單元進(jìn)行數(shù)據(jù)離散。
MFC(Microsoft Fundation Class)是集成于VC++軟件內(nèi)的程序開發(fā)工具,在開發(fā)Windows應(yīng)用程序方面功能強(qiáng)大。本文選擇VC++6.0/MFC為工具,開發(fā)基于對(duì)話框的螺旋槳幾何建模應(yīng)用程序。程序的基本結(jié)構(gòu)如圖4所示。
在圖4所示的程序結(jié)構(gòu)中,LoadData()為數(shù)據(jù)載入函數(shù),該函數(shù)實(shí)現(xiàn)MFC與EXCEL的數(shù)據(jù)傳輸;通過Calculate()函數(shù),對(duì)槳葉、尾渦面和槳轂的數(shù)據(jù)進(jìn)行計(jì)算;由3個(gè)OutPut()函數(shù)實(shí)現(xiàn)數(shù)據(jù)的輸出;由OpenGL_Show()函數(shù)實(shí)現(xiàn)螺旋槳三維的顯示,用戶可通過鍵盤與應(yīng)用程序進(jìn)行人機(jī)交互。
在三維模型顯示過程中用到的OpenGL關(guān)鍵技術(shù)如下[4,5]:
1)利用glBegin(GL_LINE_STRIP)和glBegin_(GL_POLYGON)實(shí)現(xiàn)曲線和曲面的繪制。
2)利用glOrtho()指定裁剪區(qū)域,避免在窗口形狀發(fā)生改變時(shí),螺旋槳的形狀發(fā)生扭曲。
3)在OpenGL繪圖程序的初始化函數(shù)中加入glutInitDisplayMode(GLUT_DEPTH)和glEnable_(GL_ DEPTH_TEST),在顯示回調(diào)函數(shù)中加入glDepth-Func(GL_LESS)、glClearDepth(1)和glClear_(GL_ COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)來設(shè)置深度緩存,實(shí)現(xiàn)三維圖形在視角變換過程中圖形相互遮擋與消隱的效果。
4)通過glutIdleFunc()和glutKeyboardFunc()函數(shù)來實(shí)現(xiàn)動(dòng)畫效果和人機(jī)交互功能。
利用仿真程序?qū)δ炒?葉大測(cè)斜調(diào)距槳三維模型進(jìn)行仿真。在開始仿真前需要設(shè)定一些基本參數(shù),初始參數(shù)設(shè)定完畢后,通過調(diào)用Excel數(shù)據(jù)庫來載入該螺旋槳的幾何設(shè)計(jì)參數(shù),見圖5。
在依次點(diǎn)擊了圖5所示的“頁面數(shù)據(jù)計(jì)算”和“尾渦和槳轂數(shù)據(jù)計(jì)算”功能鍵后點(diǎn)擊“三維顯示”,則該5葉大測(cè)斜調(diào)距槳的三維仿真窗口如圖6所示(為了比較的需要,圖6是4個(gè)三維仿真窗口組合而成)。圖6(a)所示的調(diào)距槳螺距值為1.6,葉片上的面元數(shù)為20×20個(gè),尾渦面上每個(gè)周期的面元數(shù)為20×30個(gè)。圖6(b)所示的是相同螺距下,調(diào)距槳葉片上的面元數(shù)增加為為30×30個(gè),尾渦面上每個(gè)周期的面元數(shù)增加為30×50個(gè)時(shí)的仿真結(jié)果。由圖可見,面元數(shù)越多,螺旋槳及其尾渦面的三維造型越逼真,而且調(diào)距槳轉(zhuǎn)動(dòng)過程中尾渦面向后發(fā)展的動(dòng)態(tài)過程一目了然。
該調(diào)距槳螺距由1.6變化為–1.5的過程中(中間過程取螺距為1.0和0),槳葉與尾渦面的的變化如圖7所示。由仿真結(jié)果可見,隨著螺距的減小直至負(fù)螺距,調(diào)距槳的尾渦面逐漸由船尾方向發(fā)展到船首方向。即隨著螺距的減小,調(diào)距槳由推進(jìn)船舶前進(jìn)逐漸過渡為拉著船舶后退。
由以上仿真結(jié)果可見,在已知螺旋槳設(shè)計(jì)圖紙?zhí)峁┑幕拘椭岛螅摲椒梢员憬?、快速地顯示出該螺旋槳葉片、尾渦面以及槳轂的三維造型,并通過鍵盤實(shí)現(xiàn)該槳三位運(yùn)動(dòng)仿真。另一方面,該方法可提供用于螺旋槳水動(dòng)力預(yù)報(bào)的面元網(wǎng)格,網(wǎng)格的精度和網(wǎng)格密度分布函數(shù)可以根據(jù)實(shí)際需要進(jìn)行調(diào)整,圖8所示的是根據(jù)余弦分布函數(shù)計(jì)算出的面元網(wǎng)格,越接近導(dǎo)邊、隨邊以及葉稍數(shù)網(wǎng)格密度越大。
本文在分析螺旋槳的三維幾何結(jié)構(gòu)的基礎(chǔ)上,研究了由螺旋槳設(shè)計(jì)圖紙?zhí)峁┑男椭禂?shù)據(jù)到螺旋槳三維幾何數(shù)據(jù)計(jì)算的全過程。利用VC++6.0實(shí)現(xiàn)了適合于各種類型螺旋槳的三維建模程序,并借助OpenGL實(shí)現(xiàn)了三維螺旋槳造型及其尾渦面的顯示與人機(jī)交互功能,提高了螺旋槳三維建模的效率。本文對(duì)螺旋槳槳葉、尾渦面以及槳轂的網(wǎng)格計(jì)算也為后續(xù)的螺旋槳水動(dòng)力學(xué)數(shù)值預(yù)報(bào)提供了基礎(chǔ)。
[1]王國(guó)強(qiáng), 董世湯. 船舶螺旋槳理論與應(yīng)用[M]. 哈爾濱工程大學(xué)出版社, 2005.
[2]董世湯, 唐登海, 周偉新. CSSRC的螺旋槳定常面元法[J]. 船舶力學(xué), 2005. 10 (5): 46–60.
[3]侯俊杰. 深入淺出MFC [M]. 華中科技大學(xué)出版社, 2001.
[4]EDWARD Angel, 段菲. OpenGL編程基礎(chǔ)[M]. 清華大學(xué)出版社, 2008.
[5]劉慧杰, 靳海亮. 基于VC_的OpenGL三維圖形開發(fā)設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程, 2009. 7: 122–124.
Research on geometric modeling procedure of porpeller based on OpenGL
HUANG Bin
(College of Naval Architecture, Naval University of Engineering, Wuhan 430033, China)
The method how the 3D data is calculated from the primordial data of blueprint of propeller is introduced detailedly. A calculating procedure fit for all kinds of propellers is proposed based on VC++6.0. Then the 3D display and the human-computer Interactive of propeller and its vortex is carried out by using the OpenGL technology, which will improve the efficiency of 3D modeling process of propeller. The calculating method of panel grids of propeller blades, vortex and hub is also useful for the hydrodynamic numerical prediction of propeller.
propeller;OpenGL;MFC;3D;panel method grid generation
TP311.5
A
1672 – 7649(2017)08 – 0032 – 04
10.3404/j.issn.1672 – 7649.2017.08.007
2015 – 12 – 14;
2016 – 09 – 05
黃斌(1980 – ),男,博士研究生,研究方向?yàn)榕灤七M(jìn)系統(tǒng)穩(wěn)、動(dòng)態(tài)特性。