馬媛 王英 王曉波
摘要:現(xiàn)實中,所有的物體都是三維的。但是在計算機(jī)中,所有的三維物體必須以二維平面圖像的形式表現(xiàn)出來。將物體的三維坐標(biāo)轉(zhuǎn)換到計算機(jī)的像素位置,需要經(jīng)過幾何變換、投影變換、裁剪變換、視口變換等操作,才能正確顯示出儲層的三維圖像。
關(guān)鍵詞:OpenGL;三維圖形顯示;精細(xì)油藏描述
中圖分類號:TP37 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)36-8764-02
1 模塊描述
對經(jīng)隨機(jī)模擬模塊和網(wǎng)格粗化模塊處理后的數(shù)據(jù)體進(jìn)行三維顯示,將所有數(shù)據(jù)以圖形的方式來表示。并顯示經(jīng)過模擬后的相模型,以及網(wǎng)格粗化后的物性參數(shù)模型。
2 設(shè)計方法
2.1 OpenGL環(huán)境和視景體設(shè)置
程序運(yùn)行時,從Display3D類中進(jìn)入,調(diào)用CmainFrame類和CDoc文檔類以及Cview視圖類。設(shè)置OpenGL環(huán)境和視景體:
1) 調(diào)用CDisplay3DView::OnCreate(LPCREATESTRUCT lpCreateStruct)函數(shù),設(shè)置象素格式和OpenGL描述表。
2) 調(diào)用CDisplay3DView::OnSize(UINT nType, int cx, int cy)函數(shù)設(shè)置視景體。
3) 在程序運(yùn)行將要完成后要銷毀OpenGL描述表。
2.2 加載數(shù)據(jù)
消息函數(shù)
void OnFileOpen()
調(diào)用對話框類
CLoadDateDlg
調(diào)用函數(shù)
BOOL CStratum.ReadFile(CString filename)
BOOL CStratum.ReadColorFile(CString filename)
void rdfl(CString filename)
設(shè)計思路:
1) 打開對話框,利用對話框中的不同控件來確定打開的文件,利用對話框類中變量記錄下需要的變量;
2) 調(diào)用函數(shù)CStratum.ReadColor(CString filename),讀取顏色值和取值范圍;
3) 調(diào)用CStratum類中的函數(shù)ReadData(CString filename),讀取文件中的數(shù)據(jù);
4) 調(diào)用SearchViewBox()為多層顯示尋找合適的視見體;
5) 利用DrawScence(),調(diào)用CStratum中的繪圖函數(shù)繪制三維圖形;
6) 利用DrawScence(),調(diào)用DrawCoord()繪制坐標(biāo)軸線和WriteScale()標(biāo)注刻度;
7) 利用DrawScence(),最后繪制色表,并在界面上顯示圖形的屬性,地質(zhì)層面。
2.3 地質(zhì)層
利用布爾變量m_bDraw3D 和m_bDrawCoord來控制“地質(zhì)層”和“坐標(biāo)”的顯示和不顯示。
“剝層顯示”,利用“剝層顯示”對話框?qū)崿F(xiàn)用戶交互,得到要顯示的地質(zhì)層和地質(zhì)小層。通過函數(shù)CStratum::DrawStratum(BOOL Atrr,BOOL flag,int z,BOOL init,float thick,bool m_bBoundary)傳遞到CStratum類中。再利用DrawScence(),依賴布爾變量m_bDrawDivLayer調(diào)用CStratum中的繪圖函數(shù)繪制只要求顯示的地質(zhì)面的三維圖形。
2.4 井位
利用CWell類的成員函數(shù)讀取測井文件中的井名,在“加載井位”對話框中顯示,讓用戶選擇要顯示的井位(包括地質(zhì)層、井位)、井柱長度、井柱半徑、井柱顏色、是否顯示井名以及井位顯示模式。再利用CWell類中的成員函數(shù)來繪制圖形。
2.5 色表
以布爾變量m_bDrawColorList來控制是否顯示色表。對于色表設(shè)置,以“色表設(shè)置”對話框來實現(xiàn)人機(jī)交互,修改色表顏色,色表表示的屬性值界限,保存修改后的值到rgb文件中。
2.6 邊界
“邊界裁減”調(diào)用CStratum類中的成員函數(shù)ReadIndexFile(CString filename),再以布爾變量m_bDrawBoundary3D來控制調(diào)用CStratum對象的成員函數(shù)DrawIndices(m_bAttr,m_bDef,m_DivLayer,0,m_fThick,m_bBoundary)來繪制三維圖形,這時的三維圖形是以三角形為圖元來繪制的。
“邊界線繪制”,用m_bBoundary來控制是否顯示。
“繪制側(cè)面”,用四邊形圖元來繪制出這個邊界側(cè)面,用GL_SMOOTH函數(shù)進(jìn)行插值,得到插值后的側(cè)面。
2.7 變換
主要是對地質(zhì)層圖形進(jìn)行模型變換得到用戶想要的視覺效果,包括兩個層次。一是多個地質(zhì)層間的模型變換,以地質(zhì)層為單位。一是對地質(zhì)小層進(jìn)行模型變換。
2.8 剖切
操作流程:“開始剖切”——“X方向剖切”“Y方向剖切”“任意方向剖切”。
“開始剖切”操作利用OpenGL的矩陣壓棧功能,對模型矩陣壓入單位矩陣,實現(xiàn)矩陣的初始化。這樣就使圖形的旋轉(zhuǎn)平移操作失效,保證了剖切時的的精度。
“X方向剖切”,只有點擊了“開始剖切”按鈕這一項才有效,這時菜單項“X方向剖切”才會有效。這里用布爾變量g_bMenu來控制菜單項的是否變灰。
函數(shù)GetSectionX(m_xcut,m_ycut) 得到每個地質(zhì)層的切面數(shù)據(jù)的具體算法如下:endprint
1) 得到鼠標(biāo)點的世界坐標(biāo)(m_xcut,m_ycut);
2) 判斷這一點在Y方向的第幾個網(wǎng)格節(jié)點上;
3) 沿X方向剖切,剖切面的上的所有點的y坐標(biāo)就是m_ycut;
4) 剖切面上的所有點的x坐標(biāo)就是這一行網(wǎng)格節(jié)點的x坐標(biāo);
5) 剖切面上的所有點的z坐標(biāo)是經(jīng)過線性插值而得到( (m_ycut-mesh.y)/dy*((mesh+1).z-mesh.z)+mesh.z);
剖切面上的所有點的屬性經(jīng)過線性插值而得到( (m_ycut-mesh.y)/dy*((mesh+1).attr-mesh. attr)+mesh. attr)。
3 程序流程圖
圖1 地質(zhì)層三維顯示的程序流程圖
4 結(jié)束語
目前為止,OpenGL依然是行業(yè)領(lǐng)域中最為廣泛的2D/3D 圖形 API,是一個針對圖形硬件開放的三維圖形軟件包,獨立于硬件設(shè)備、窗口系統(tǒng)和操作系統(tǒng),可以很方便在各種平臺上移植。它提供了120多個函數(shù),開發(fā)者可以用這些函數(shù)來建立三維模型和進(jìn)行三維實時交互。技術(shù)人員可以根據(jù)其三維顯示來完成油氣儲層的建模工作,以此指導(dǎo)精細(xì)油藏描述。
參考文獻(xiàn):
[1] 曾新平, 楊自安, 劉碧虹,等. 地質(zhì)體三維可視化建模的技術(shù)方法研究[J]. 地礦與地質(zhì), 2005, 19(107): 103-106.
[2] Liu J,Yang F.Analyzing structural evolution and the significance of oil-gas geology in Xixuan area of Shiwu Fault depression by using 3D seismic data Jianghan Shiyou Xueyuan Xuebao/Journal of Jianghan Petroleum Institute,2005(27).
[3] 吳健生,王仰麟,曾新平,等.三維可視化環(huán)境下礦體空間數(shù)據(jù)插值[J].北京大學(xué)學(xué)報,2004,40(4) :635-642.
[4] 劉祚秋,周翠英,趙旭升,等.三維地層模型及可視化技術(shù)研究[J].中山大學(xué)學(xué)報,2003,42(4) :41-44.
1) 得到鼠標(biāo)點的世界坐標(biāo)(m_xcut,m_ycut);
2) 判斷這一點在Y方向的第幾個網(wǎng)格節(jié)點上;
3) 沿X方向剖切,剖切面的上的所有點的y坐標(biāo)就是m_ycut;
4) 剖切面上的所有點的x坐標(biāo)就是這一行網(wǎng)格節(jié)點的x坐標(biāo);
5) 剖切面上的所有點的z坐標(biāo)是經(jīng)過線性插值而得到( (m_ycut-mesh.y)/dy*((mesh+1).z-mesh.z)+mesh.z);
剖切面上的所有點的屬性經(jīng)過線性插值而得到( (m_ycut-mesh.y)/dy*((mesh+1).attr-mesh. attr)+mesh. attr)。
3 程序流程圖
圖1 地質(zhì)層三維顯示的程序流程圖
4 結(jié)束語
目前為止,OpenGL依然是行業(yè)領(lǐng)域中最為廣泛的2D/3D 圖形 API,是一個針對圖形硬件開放的三維圖形軟件包,獨立于硬件設(shè)備、窗口系統(tǒng)和操作系統(tǒng),可以很方便在各種平臺上移植。它提供了120多個函數(shù),開發(fā)者可以用這些函數(shù)來建立三維模型和進(jìn)行三維實時交互。技術(shù)人員可以根據(jù)其三維顯示來完成油氣儲層的建模工作,以此指導(dǎo)精細(xì)油藏描述。
參考文獻(xiàn):
[1] 曾新平, 楊自安, 劉碧虹,等. 地質(zhì)體三維可視化建模的技術(shù)方法研究[J]. 地礦與地質(zhì), 2005, 19(107): 103-106.
[2] Liu J,Yang F.Analyzing structural evolution and the significance of oil-gas geology in Xixuan area of Shiwu Fault depression by using 3D seismic data Jianghan Shiyou Xueyuan Xuebao/Journal of Jianghan Petroleum Institute,2005(27).
[3] 吳健生,王仰麟,曾新平,等.三維可視化環(huán)境下礦體空間數(shù)據(jù)插值[J].北京大學(xué)學(xué)報,2004,40(4) :635-642.
[4] 劉祚秋,周翠英,趙旭升,等.三維地層模型及可視化技術(shù)研究[J].中山大學(xué)學(xué)報,2003,42(4) :41-44.
1) 得到鼠標(biāo)點的世界坐標(biāo)(m_xcut,m_ycut);
2) 判斷這一點在Y方向的第幾個網(wǎng)格節(jié)點上;
3) 沿X方向剖切,剖切面的上的所有點的y坐標(biāo)就是m_ycut;
4) 剖切面上的所有點的x坐標(biāo)就是這一行網(wǎng)格節(jié)點的x坐標(biāo);
5) 剖切面上的所有點的z坐標(biāo)是經(jīng)過線性插值而得到( (m_ycut-mesh.y)/dy*((mesh+1).z-mesh.z)+mesh.z);
剖切面上的所有點的屬性經(jīng)過線性插值而得到( (m_ycut-mesh.y)/dy*((mesh+1).attr-mesh. attr)+mesh. attr)。
3 程序流程圖
圖1 地質(zhì)層三維顯示的程序流程圖
4 結(jié)束語
目前為止,OpenGL依然是行業(yè)領(lǐng)域中最為廣泛的2D/3D 圖形 API,是一個針對圖形硬件開放的三維圖形軟件包,獨立于硬件設(shè)備、窗口系統(tǒng)和操作系統(tǒng),可以很方便在各種平臺上移植。它提供了120多個函數(shù),開發(fā)者可以用這些函數(shù)來建立三維模型和進(jìn)行三維實時交互。技術(shù)人員可以根據(jù)其三維顯示來完成油氣儲層的建模工作,以此指導(dǎo)精細(xì)油藏描述。
參考文獻(xiàn):
[1] 曾新平, 楊自安, 劉碧虹,等. 地質(zhì)體三維可視化建模的技術(shù)方法研究[J]. 地礦與地質(zhì), 2005, 19(107): 103-106.
[2] Liu J,Yang F.Analyzing structural evolution and the significance of oil-gas geology in Xixuan area of Shiwu Fault depression by using 3D seismic data Jianghan Shiyou Xueyuan Xuebao/Journal of Jianghan Petroleum Institute,2005(27).
[3] 吳健生,王仰麟,曾新平,等.三維可視化環(huán)境下礦體空間數(shù)據(jù)插值[J].北京大學(xué)學(xué)報,2004,40(4) :635-642.
[4] 劉祚秋,周翠英,趙旭升,等.三維地層模型及可視化技術(shù)研究[J].中山大學(xué)學(xué)報,2003,42(4) :41-44.