通過地震、測井可得到關于油藏地層測試點孔隙度、滲透率等物性參數,但這些數據數量龐大,難以直接進行地質分析。為了解油層結構和分布,需要將油藏地層模型在計算機上再現,并對其進行一些交互式操作及初步處理。
系統實現方法是:首先組織數據(幾何頂點,物性參數值等)及提取可視面,并與所需要的目標結合,實現對模型的繪制。其次,提供對模型的分解和剖切方法,實現由數據驅動的對模型的操作控制。
2 數據處理與參數的顏色索引
2.1 系統的地質數據
系統讀入的原始網格數據示例如下:
第一行數據的前3個數據數據分別表示X,Y,Z軸方向上的網格個數,第4~6個數據分別表示X,Y,Z軸方向上的原點坐標,而第7~8個數據表示沿X,Y軸方向的網格間距大小。第二行數據"2"表示以下是兩列數據,第一列數據(如940.700)表示深度值,第二列數據(如73.000)表示對應點的參數值。
由于網格結點在xoy平面上是規(guī)則的順序排列,給出已知的沿x,y方向的網格間距dx,dy,網格數Nx,Ny和幾何坐標系原點坐標x0,y0,z0,則任一網格結點Node的空間坐標和參數為:
式中:i的范圍為[O,Nx-1],j的范圍為[0,Ny-1];k為結點Node(i,j)處深度的序數,其值與深度的排列方式有關。dpk,sk為第k點處的深度和物性參數。
2.2 處理原始數據
由于原始數據采用大地坐標,為方便繪圖,應對數據進行坐標變換。將X,Y,Z上數據范圍變換到-1~1之間,經過縮放變換,才能在視圖區(qū)顯示出圖形。原始數據在測量時可能存在誤差,因此在讀入數據后需對數據進行有效性檢驗。
2.3 參數的顏色索引
OpenGL的顏色索引模式通過建立一個顏色索引表(又稱彩色表)確定所繪制物體的顏色。彩色表的建立可通過指定彩色表兩端的基色和尾色,插值計算出中間其它顏色,分別賦予相應索引號。在給模型著色時,將讀人數據點對應的參數值轉化成彩色表上的索引號,便可確定參數的顏色。由于彩色表上的索引號對應的參數是離散的,應對參數值在彩色表中對應的位置作四舍五人以精確給出其索引號。設參數存儲在數組parameter中,color_num為彩色表長度。將參數轉化為顏色索引號p的代碼段如下:
對應的索引號
以上創(chuàng)建出來的顏色可能較單調,一些位于中間部分的參數值對應的顏色區(qū)別不明顯。一種改進方法是將彩色表分成4段,每一段只控制一種顏色分量的變化,這樣彩色表的顏色變化種類大大增加了,使位于中間部分的參數值顏色區(qū)分很明顯,可更直觀的反映出油藏情況。
基色和尾色通常根據油藏描述的實際要求指定,例如類藍色(表示水)和類紅色(表示油),分別對應物性參數(如滲透率)的最小值和最大值。
3 建立三維地質數據模型
3.1 繪制三維地質模型的基本思想
實現三維地質模型繪制的關鍵步驟是對數據體建模。由對讀入數據的排列結構分析可知,原始網格數據形成了一個三維地層模型。除了在垂直方向(Z方向)上的兩個面有上下起伏外,其余的面均是平行于ZOY,面或ZOX面的平面。如圖1所示。
地層模型的可視面即底面、頂面、左面、右面、前面及后面,因此只畫這6個面的外側就可以繪制出整個6面體。問題便轉化成提取這6個面上的數據,用OpenGL的繪圖技術對每一個面分別進行繪制。
3.2 三維地質數據體模型的生成
模型立方體的6個面由很多小4邊形組成,可采用OpenGL畫連續(xù)4邊形的方法將每一個面畫出來。填充顏色則可采用OpenGL的平滑(SMOOTH)著色方式,定義出頂點的顏色后,OpenGL便自動地對4邊形內的顏色插值計算,進行顏色漸變繪制。著色之前采用Z緩存(Z_buffer)技術通過對物體進行深度測試的方法實現消隱。
以底面創(chuàng)建為例,考慮一般情況,設x軸上的網格個數為x_lenth,z軸的數據存儲在數組z_data中,當前繪制的4邊形片序數為循環(huán)變量j,各頂點的顏色值由參數值轉化成顏色索引值確定,并由向量模式給出。自動提取底面數據并繪制底面的程序段為:
其中,函數getparaindex()返回對應參數的顏色索引值。底面繪制完成后,以此類推,可提取其它可視面數據(頂點及其排列順序),同樣對其它可視面進行繪制、消隱和著色,由此生成三維油藏地質模型。
4 模型操作
4.1 數據體撥層
通過對數據體進行撥層,即沿Z軸分解數據體的層面,按層提取并繪制數據體的可視面,可以得到撥層面的圖形,還可以得到撥層后數據塊的圖形。撥層面的繪制可通過繪制數據體被撥層后的頂面圖形實現。在VC中使用Slider控件傳遞參數,確定"顯示撥層面"操作的次數,這樣可顯示多個撥層面,通過旋轉等操作,可清楚的看出撥層面之間的油藏情況,如圖2所示。
4.2 切片和切塊
通過對數據體切片,即切割數據體的X軸、Y軸,得到剖面或截面的圖形。垂直于X軸、Y軸的一系列的切割點的位置由Visual C++中的鼠標響應程序得到,而切割點的顏色通過切割點兩旁的網格數據點的顏色插值得到。這其中須注意兩個問題:①Visual C++中數據和OpenGL中數據的轉化。因通過雙擊鼠標左鍵選擇切割點,得到的是VC中的響應坐標,需要把其轉化成OpenGL中的坐標。由變換語句glFrustum();可知在OpenGL中窗口的寬和高,而且可知VC中窗口的大小,因此二者之間存在一個比例關系,再考慮X軸、Y軸的長度因素,可得到切割點在OpenGL中的坐標。②關于得到切割點顏色。OpenGL中采取平滑模式(GL_SMOOTH)時,給定多邊形內各點的顏色是通過頂點顏色插值得到的。因此,當切割點選擇在給定網格點之間時,切割點的顏色可通過顏色捕值得到。繪制時需注意頂點和顏色的對應關系。利用某油田數據繪制的切片圖如圖3所示。
切塊功能和切片功能類似,但得到的不是一個面,而是一個數據體。該功能的第一步和切片功能相似,要得到切割點在OpenGL中的坐標。第二步畫數據體圖形的時候,不再是只畫其中的一個面,而是要畫數據體的6個面,因此該功能和切片、旋轉等功能綜合使用時,要注意功能標志的設置問題。利用某油田數據繪制的切塊圖如圖4所示。
5 結語
提出了一種基于OpenGL建立三維油藏地質數據模型的簡便方法,在根據實際要求創(chuàng)建彩色表并將原始物性參數轉化為顏色索引值的基礎上,可自動提取網格數據體可視面上的數據,然后利用OpenGL繪圖技術對模型繪制。與傳統的三維油藏可視化軟件系統比較,這里提出的系統繪制效率更高,特別是對模型進行撥層、切片、切塊等操作處理是該系統的特色。