器和像素著色器 采樣此紋理來實(shí)現(xiàn)對(duì)地震數(shù)據(jù)的訪問,本實(shí)施例要顯示地震剖面中以(1400,1150)為起始 點(diǎn)的400道、300個(gè)樣點(diǎn),根據(jù)步驟1中所述,讀取的地震道和地震樣點(diǎn)(即x、y)的取值范 圍應(yīng)為1400彡X彡1799,1147彡y彡1452,創(chuàng)建的地震數(shù)據(jù)紋理的大小為400X306 ; 步驟6 :效果文件創(chuàng)建,包括創(chuàng)建渲染到紋理效果文件和創(chuàng)建渲染輸出效果文件兩部 分,倉Il建方法分別為: 渲染到紋理效果文件創(chuàng)建:創(chuàng)建用于將每一個(gè)地震樣點(diǎn)的傾斜方式渲染到紋理的效 果文件,包含了一個(gè)手法,手法中包含一個(gè)路徑,在路徑中包含一個(gè)頂點(diǎn)著色器和像素著色 器,在頂點(diǎn)著色器中僅將輸入的頂點(diǎn)位置和紋理坐標(biāo)輸出給像素著色器,不做任何變換,實(shí) 現(xiàn)平行投影,將像素著色器輸出的值渲染到對(duì)應(yīng)的傾斜方式紋理的紋理元素上,在像素著 色器中采樣地震數(shù)據(jù)紋理,利用一個(gè)大小為5個(gè)地震樣點(diǎn)間隔的窗口計(jì)算目標(biāo)樣點(diǎn)與下一 道上窗口滑動(dòng)范圍(+1、〇、-1)內(nèi)樣點(diǎn)的相關(guān)系數(shù),用正負(fù)號(hào)來表示樣點(diǎn)是上傾斜還是下傾 斜,用數(shù)值+1、〇、-1表示傾斜幅度,將結(jié)果渲染到傾斜方式紋理的紋理元素R分量中; 渲染輸出效果文件創(chuàng)建:創(chuàng)建用于將地震數(shù)據(jù)網(wǎng)格渲染輸出的效果文件,包含一個(gè)手 法,手法中使用一個(gè)路徑,在路徑中包含一個(gè)頂點(diǎn)著色器和像素著色器,在頂點(diǎn)著色器中根 據(jù)輸入的x、y坐標(biāo)來采樣地震數(shù)據(jù)紋理中的樣點(diǎn)值作為z坐標(biāo),然后進(jìn)行世界變換、觀察變 換和投影變換,并將地震數(shù)據(jù)紋理中的樣點(diǎn)值轉(zhuǎn)換為紋理坐標(biāo)輸出給像素著色器,轉(zhuǎn)換方 式在步驟3中已進(jìn)行詳述,本實(shí)施例采用的是線性紋理坐標(biāo)映射,如圖6中所示。需要說明 的是,這里用于轉(zhuǎn)換為紋理坐標(biāo)的地震樣點(diǎn)幅度值已經(jīng)經(jīng)過了光柵化器的自動(dòng)線性插值, 在像素著色器中根據(jù)頂點(diǎn)著色器輸出的紋理坐標(biāo)采樣調(diào)色板紋理,為地震數(shù)據(jù)頂點(diǎn)著色; 步驟7 :渲染到紋理,將所需顯示的每個(gè)地震樣點(diǎn)的傾斜方式渲染到傾斜方式紋理中, 渲染到紋理的步驟為: 第一步,將可編程管線的渲染目標(biāo)改為傾斜方式紋理的渲染目標(biāo)視圖,然后將渲染目 標(biāo)綁定到渲染管線的輸出合并階段; 第二步,創(chuàng)建一個(gè)光柵化狀態(tài)塊,可以在這里設(shè)置圖元拓?fù)浞绞綖榫€框方式或者填充 方式,然后使用這個(gè)狀態(tài)塊更新設(shè)備,線框方式顯示的結(jié)果如圖7中(e),圖11中(a)、(b), 圖12中(a)、(b),圖14中(a)、(b)所示,填充方式顯示的結(jié)果如圖5中(a)、(b),圖7中 (a)、(b)、(c)、(d),圖 9 中(a)、(b)、(c),圖 11 中(c),圖 12 中(c),圖 14 中(c)以及圖 16 中(a)~(h)所示; 第三步,將渲染到紋理頂點(diǎn)輸入布局和頂點(diǎn)緩沖區(qū)綁定到管線的輸入?yún)R編階段; 第四步,用循環(huán)語句遍歷手法中的每個(gè)路徑,獲取所用路徑對(duì)象的接口指針,使用路徑 來繪制渲染到紋理所定義的矩形,此時(shí)Direct3D會(huì)啟用在路徑中指定的著色器和渲染狀 態(tài),通過路徑的Apply方法更新在GPU內(nèi)存中的常量緩沖區(qū)、將著色器程序綁定到管線、并 啟用在路徑中指定的各種渲染狀態(tài); 第五步,調(diào)用設(shè)備的RSSetStateO方法并指定空值來恢復(fù)光柵化狀態(tài)塊的默認(rèn)狀態(tài)。 步驟8 :網(wǎng)格創(chuàng)建與渲染,創(chuàng)建地震數(shù)據(jù)網(wǎng)格并渲染輸出。本實(shí)施例創(chuàng)建地震數(shù)據(jù)網(wǎng)格 的步驟為: 第一步,為了在CPU中獲取渲染后的傾斜方式紋理中的值,需要?jiǎng)?chuàng)建一個(gè)和傾斜方式 紋理同樣大小、同樣紋理元素格式的紋理,紋理的CPU訪問標(biāo)志為只讀,然后將傾斜方式紋 理資源復(fù)制到新創(chuàng)建的目的紋理中; 第二步,獲取指向目的紋理的數(shù)據(jù)起始地址的指針; 第三步,定義一個(gè)三維向量型的位置動(dòng)態(tài)鏈表,從左邊第一個(gè)道開始遍歷每一道上的 每一個(gè)地震樣點(diǎn),遍歷到每一個(gè)地震樣點(diǎn)時(shí),位置鏈表增加一個(gè)元素,元素的X值為地震樣 點(diǎn)所處的道號(hào)向減去所需顯示地震道總數(shù)的一半(為了使顯示的曲面的中心在窗口的中 心上)再乘以水平方向的尺度,y值為地震樣點(diǎn)的時(shí)間序號(hào)向減去每道上所需顯示樣點(diǎn)總 數(shù)的一半(為了使顯示的曲面的中心在窗口的中心上)再乘以垂直方向的尺度,沒有給Z 分量賦值,Z分量的值在頂點(diǎn)著色器中基于前兩個(gè)坐標(biāo)通過采樣地震數(shù)據(jù)紋理得到,然后將 此位置向量賦值給一個(gè)臨時(shí)的地震數(shù)據(jù)頂點(diǎn)結(jié)構(gòu)對(duì)象,并將此對(duì)象添加到地震數(shù)據(jù)頂點(diǎn)動(dòng) 態(tài)鏈表中; 第四步,根據(jù)相應(yīng)位置處傾斜方式紋理中紋理元素的值是表示上傾斜或者下傾斜或者 沒有傾斜來給索引動(dòng)態(tài)鏈表增加六個(gè)索引值,這六個(gè)索引值是的同一道上的兩個(gè)相鄰樣點(diǎn) 和下一道上的兩個(gè)相鄰樣點(diǎn)構(gòu)成了一個(gè)矩形,這就是前面所述的本實(shí)施例所采用的低傾斜 自適應(yīng)相關(guān)傾斜方式,獲得的地震剖面數(shù)據(jù)的顯示結(jié)果; 第五步,使指向目的紋理的數(shù)據(jù)起始地址的指針無效,釋放目的紋理; 第六步,以地震數(shù)據(jù)輸入頂點(diǎn)布局、地震數(shù)據(jù)頂點(diǎn)動(dòng)態(tài)鏈表的大小、索引動(dòng)態(tài)鏈表的大 小等為參數(shù)創(chuàng)建地震數(shù)據(jù)網(wǎng)格。 本實(shí)施例最后的渲染步驟為: 第一步,將可編程管線的渲染目標(biāo)改為設(shè)備原來的渲染目標(biāo)視圖,然后將渲染目標(biāo)綁 定到渲染管線的輸出合并階段; 第二步,獲取攝像機(jī)的世界、觀察、投影矩陣并更新到GPU中對(duì)應(yīng)的常量中; 第三步,創(chuàng)建一個(gè)光柵化狀態(tài)塊,可以在這里設(shè)置圖元拓?fù)浞绞綖榫€框方式或者填充 方式,然后使用這個(gè)狀態(tài)塊更新設(shè)備; 第四步,用循環(huán)語句遍歷渲染輸出效果文件手法中的每個(gè)路徑,獲取所用路徑對(duì)象的 接口指針,使用路徑來繪制地震數(shù)據(jù)網(wǎng)格,此時(shí)Direct3D會(huì)啟用在路徑中指定的著色器和 渲染狀態(tài),通過路徑的Apply方法更新在GPU內(nèi)存中的常量緩沖區(qū)、將著色器程序綁定到管 線、并啟用在路徑中指定的各種渲染狀態(tài); 第五步,調(diào)用設(shè)備的RSSetStateO方法并指定空值來恢復(fù)光柵化狀態(tài)塊的默認(rèn)狀態(tài)。 經(jīng)過以上步驟之后,本實(shí)施例即實(shí)現(xiàn)了對(duì)地震剖面數(shù)據(jù)的三維顯示,實(shí)現(xiàn)了一種二維 地震數(shù)據(jù)剖面的三維顯示方法,為了驗(yàn)證本方法的可行性與先進(jìn)性,在圖15(a)~(e)列出 了采用Seisee2. 5. beta-2軟件對(duì)與本實(shí)施例中相同的地震剖面數(shù)據(jù)以幾種不同傳統(tǒng)二維 方式顯示的結(jié)果,Seisee2. 5. beta-2是由國際石油地質(zhì)界知名的俄羅斯導(dǎo)蒙乃地質(zhì)技術(shù)公 司(DMNG-Dalmornefte geophysica)的 Sergey Pavlukhin 在 2006 年 4 月開發(fā)出來的,在 圖16(a)~(h)中列出了本實(shí)施例通過采用顏色指數(shù)漸進(jìn)調(diào)色板、線性幅度插值、線性紋理 坐標(biāo)映射以及低傾斜自適應(yīng)相關(guān)鑲嵌得到的地震剖面的從各個(gè)三維角度觀察得到的顯示 結(jié)果,通過對(duì)比可知本實(shí)施例所獲得的三維顯示結(jié)果可以更方便、有效地分析地質(zhì)結(jié)構(gòu),證 明了本發(fā)明的先進(jìn)性。
【主權(quán)項(xiàng)】
1. 一種二維地震剖面三維顯示方法,其特征在于:該方法的具體實(shí)現(xiàn)步驟如下, 步驟1 :地震數(shù)據(jù)讀取與解析,以二進(jìn)制方式從磁盤中讀入標(biāo)準(zhǔn)segy地震數(shù)據(jù)并解析 出地震樣點(diǎn)數(shù)據(jù); 步驟2 :頂點(diǎn)輸入布局創(chuàng)建,定義頂點(diǎn)的屬性結(jié)構(gòu),包括地震數(shù)據(jù)頂點(diǎn)輸入布局創(chuàng)建和 渲染到紋理頂點(diǎn)輸入布局創(chuàng)建; 步驟3 :調(diào)色板紋理創(chuàng)建與采樣,創(chuàng)建用于在顯示中為地震數(shù)據(jù)頂點(diǎn)著色的調(diào)色板并 定義在GPU著色器中采樣調(diào)色板紋理的方式; 步驟4 :傾斜方式紋理創(chuàng)建,創(chuàng)建一幅紋理,用于存儲(chǔ)所渲染顯示的每一個(gè)地震樣點(diǎn)的 數(shù)值化的傾斜方式; 步驟5 :地震數(shù)據(jù)紋理創(chuàng)建,創(chuàng)建一幅用于存儲(chǔ)地震數(shù)據(jù)的紋理,以通過在GPU中采樣 地震數(shù)據(jù)紋理方式將地震數(shù)據(jù)傳遞到GPU中; 步驟6 :效果文件創(chuàng)建,效果文件封裝了與所需繪制效果相關(guān)的著色器、設(shè)備狀態(tài)和繪 制路徑等任務(wù),這里創(chuàng)建的效果文件包括渲染到紋理效果文件創(chuàng)建和渲染輸出效果文件創(chuàng) 建; 步驟7 :渲染到紋理,將所需渲染顯示的每一個(gè)地震樣點(diǎn)的數(shù)值化后的傾斜方式渲染 到紋理中; 步驟8 :網(wǎng)格創(chuàng)建與渲染,創(chuàng)建地震數(shù)據(jù)網(wǎng)格并渲染輸出; 具體包括以下步驟, 步驟1 :地震數(shù)據(jù)讀取與解析,用S(x,y)表示讀取的標(biāo)準(zhǔn)segy格式的地震數(shù)據(jù),(x,y) 表示樣點(diǎn)在地震剖面中的二維坐標(biāo),x、y均為非負(fù)整數(shù),要顯示的地震剖面的范圍是以(jD, ic)為起始點(diǎn)的w道、h個(gè)樣點(diǎn),考慮到求相關(guān)時(shí)窗口大小為5,窗口滑動(dòng)范圍為(_1,1),所 以x、y的取值范圍為j。彡x彡jQ+w-l,iQ-3彡y彡iQ+h+2,確定了要顯示的地震數(shù)據(jù)大小 之后,就可以確定窗口的大小了;以二進(jìn)制方式從本地磁盤中讀取要顯示的標(biāo)準(zhǔn)segy地震 剖面數(shù)據(jù),由于數(shù)據(jù)中包含3200字節(jié)EB⑶1C文件頭、400字節(jié)二進(jìn)制文件頭,每一道地震 數(shù)據(jù)的前面都有240字節(jié)的道頭信息,讀取每一道地震數(shù)據(jù)時(shí),都要先將讀取地址定位到 3600+1X(240+每一道的樣點(diǎn)總數(shù)X4)位置處,每一道的樣點(diǎn)數(shù)等信息存儲(chǔ)在道頭信息 中,在本實(shí)施例中為4001,然后讀取要顯示的地震樣點(diǎn)數(shù)據(jù),標(biāo)準(zhǔn)segy地震剖面數(shù)據(jù)的編 碼格式為32位的IBM浮點(diǎn)型格式,將其轉(zhuǎn)換為微機(jī)處理的IEEE型格式并存儲(chǔ),即完成了地 震數(shù)據(jù)的讀取與解析; 步驟2 :頂點(diǎn)輸入布局創(chuàng)建,包括地震數(shù)據(jù)頂點(diǎn)輸入布局創(chuàng)建和渲染到紋理頂點(diǎn)輸入 布局創(chuàng)建兩部分,用于定義頂點(diǎn)的結(jié)構(gòu)屬性;創(chuàng)建方法分別如下: 地震數(shù)據(jù)頂點(diǎn)輸入布局創(chuàng)建的步驟是: 第一步,先創(chuàng)建一個(gè)包含地震數(shù)據(jù)頂點(diǎn)所需屬性的結(jié)構(gòu)體,此結(jié)構(gòu)體包含了頂點(diǎn)各分 量的類型和屬性名,這里只需一個(gè)三維位置向量,這個(gè)三維位置向量用包含三個(gè)32位浮點(diǎn) 分量的D3DXVECTOR3類型來定義;如果通過將頂點(diǎn)的顏色屬性添加到此結(jié)構(gòu)中來對(duì)頂點(diǎn)進(jìn) 行著色,將會(huì)產(chǎn)生頂點(diǎn)之間顏色不能與地震幅度正確對(duì)應(yīng)的問題,如果將顏色作為頂點(diǎn)結(jié) 構(gòu)的屬性之一,那么光柵化器在對(duì)頂點(diǎn)位置進(jìn)行插值的同時(shí)也對(duì)顏色進(jìn)行了插值,而它對(duì) 顏色的插值并不是根據(jù)地震幅度進(jìn)行的; 第二步,創(chuàng)建D3D10_INPUT_ELEMENT_DESC型數(shù)組,數(shù)組中的每個(gè)元素描述了頂點(diǎn)結(jié)構(gòu) 體的一個(gè)分量,這里只需要描述位置分量即可,包括位置分量的語義、格式; 第三步,創(chuàng)建地震頂點(diǎn)輸入布局layout,以使Direct3D知道該如何使用每個(gè)分量,同 時(shí)也建立了從頂點(diǎn)結(jié)構(gòu)體到著色器輸入之間的映射關(guān)系; 第四步,在創(chuàng)建地震數(shù)據(jù)網(wǎng)格時(shí),用于說明地震頂點(diǎn)的格式; 渲染到紋理頂點(diǎn)輸入布局創(chuàng)建的步驟是: 第一步,先創(chuàng)建一個(gè)包含渲染到紋理頂點(diǎn)的結(jié)構(gòu)體,包含頂點(diǎn)各分量的類型和屬性名, 需要一個(gè)三維位置分量和一個(gè)二維紋理坐標(biāo)分量,即:D3DXVECT0R3和D3DXVECT0R2兩種類 型的分量; 第二步,創(chuàng)建D3D10_INPUT_ELEMENT_DESC型數(shù)組,數(shù)組中的每個(gè)元素描述了頂點(diǎn)結(jié)構(gòu) 體的一個(gè)分量,這里描述了三維位置分量和二維紋理坐標(biāo)分量; 第三步,創(chuàng)建渲染到紋理頂點(diǎn)輸入布局,以使Direct3D知道該如何使用每個(gè)分量,同 時(shí)也建立從頂點(diǎn)結(jié)構(gòu)體到著色器輸入之間的映射關(guān)系; 第四步,在設(shè)備使用渲染到紋理頂點(diǎn)輸入布局之前,頂點(diǎn)輸入布局綁定到管線的輸入 匯編階段; 步驟3 :調(diào)色板紋理創(chuàng)建與采樣,創(chuàng)建用于為地震數(shù)據(jù)頂點(diǎn)著色的調(diào)色板并定義調(diào)色 板的采樣方式,調(diào)色板紋理元素的格式為128位浮點(diǎn)數(shù),包含R、G、B、A四個(gè)分量,每個(gè)紋理 坐標(biāo)對(duì)應(yīng)了一種顏色,本方法定義飽和度為1的紅色表示地震幅度最小值,白色表示0幅 度,飽和度為1的藍(lán)色表示地震幅度最大值,假設(shè)調(diào)色板中定義了n個(gè)顏色向量,則紋理坐 標(biāo)(U,V)中V= 0,U從0到1按