欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法

文檔序號(hào):6400871閱讀:176來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法
技術(shù)領(lǐng)域
本發(fā)明屬于計(jì)算機(jī)圖形學(xué)領(lǐng)域和地質(zhì)建模領(lǐng)域,涉及多分辨海量地質(zhì)數(shù)據(jù)的實(shí)時(shí)渲染,使用CUDA并行技術(shù),為一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法。
背景技術(shù)
體繪制作為一種渲染技術(shù),具有對(duì)三維數(shù)據(jù)完全的描述能力,廣泛應(yīng)用在醫(yī)療、地質(zhì)成像、數(shù)字雕刻等領(lǐng)域。將體繪制技術(shù)應(yīng)用到三維地震體數(shù)據(jù)的實(shí)時(shí)渲染上能夠極大提聞石油的勘探效率。三維地震體數(shù)據(jù)具有海量、多分辨率的特點(diǎn),由于硬件條件的限制,我們的渲染工作需要有良好的數(shù)據(jù)調(diào)度管理。另外,為了提高最終的渲染質(zhì)量,在一次渲染中,要根據(jù)觀察點(diǎn)和體數(shù)據(jù)的三位位置關(guān)系,使用不同分辨率的體數(shù)據(jù)塊進(jìn)行體繪制。這樣才能達(dá)到實(shí)時(shí)和良好的繪制效果。但是由于體繪制在計(jì)算過(guò)程中要遍歷所有視點(diǎn)中的體數(shù)據(jù)塊,所以對(duì)于海量三維地震體數(shù)據(jù)的體繪制是一個(gè)計(jì)算和數(shù)據(jù)雙重密集的問(wèn)題。傳統(tǒng)的體繪制技術(shù)主要針對(duì)小規(guī)模數(shù)據(jù),而且計(jì)算量大,復(fù)雜度高,難以達(dá)到實(shí)時(shí)交互式體繪制的要求?;谟布捏w繪制算法由于硬件價(jià)格昂貴及紋理數(shù)量的限制等原因難以普及。隨著圖形芯片技術(shù)的發(fā)展,早期僅適用于工作站平臺(tái)的實(shí)時(shí)體繪制技術(shù)在PC平臺(tái)也得到了快速發(fā)展。隨著GPGPU概念的提出,基于CPU-GPU的異構(gòu)并行計(jì)算平臺(tái)為PC平臺(tái)計(jì)算的性能提升提供了可能。CUDA (Compute Unified Device Architecture,統(tǒng)一計(jì)算架構(gòu))是由NVIDIA所推出的一種整合技術(shù),是該公司對(duì)于GPGPU的正式名稱(chēng)。得益與此,很多成像效果好,但計(jì)算量巨大的體繪制方法已經(jīng)可以在PC平臺(tái)上實(shí)現(xiàn)實(shí)時(shí)的運(yùn)算和繪制。本發(fā)明結(jié)合地質(zhì)領(lǐng)域的應(yīng)用需求,提出了 一套基于CUDA并行計(jì)算架構(gòu)的,針對(duì)海量三維地震體數(shù)據(jù)的光線投射實(shí)時(shí)體繪制算法。

發(fā)明內(nèi)容
本發(fā)明要解決的問(wèn)題是:針對(duì)多分辨海量三維地震體數(shù)據(jù),進(jìn)行實(shí)時(shí)體繪制,現(xiàn)有的算法要么無(wú)法繪制海量數(shù)據(jù),要么無(wú)法達(dá)到實(shí)時(shí)渲染的效果,要么成像效果不佳,難以達(dá)到要求。本發(fā)明的技術(shù)方案為:一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,使用CUDA并行技術(shù)對(duì)三維地震多分辨體數(shù)據(jù)進(jìn)行實(shí)時(shí)渲染,包括以下步驟:步驟1:使用CUDA并行技術(shù)進(jìn)行當(dāng)前分辨率下體數(shù)據(jù)塊是否可見(jiàn)的判斷:在當(dāng)前渲染場(chǎng)景下,根據(jù)繪圖程序接口 OpenGL當(dāng)前的ModelView矩陣和Projection矩陣計(jì)算出視錐的6個(gè)面,用來(lái)判斷當(dāng)前分辨率下體數(shù)據(jù)塊是否出現(xiàn)在可見(jiàn)視錐中,即當(dāng)前分辨率下體數(shù)據(jù)塊是否可見(jiàn):將視錐視為AABB包圍盒,判斷體數(shù)據(jù)塊8個(gè)頂點(diǎn)中的positive頂點(diǎn)和negative頂點(diǎn)是否在視錐中,從而判斷該體數(shù)據(jù)塊是否出現(xiàn)在視錐中;所述的計(jì)算和判斷利用CUDA并行技術(shù)并行化;
如果當(dāng)前分辨率級(jí)別未設(shè)置,將當(dāng)前分辨率級(jí)別初始化為三維地震多分辨體數(shù)據(jù)的最低分辨率級(jí)別;步驟2:使用CUDA并行技術(shù)判斷可見(jiàn)體數(shù)據(jù)塊的當(dāng)前分辨率是否滿(mǎn)足需求,以確定最終渲染時(shí),各可見(jiàn)體數(shù)據(jù)塊所使用的分辨率,并生成本次渲染需要的體數(shù)據(jù)塊列表:判斷當(dāng)前分辨率是否滿(mǎn)足需求時(shí),先將可見(jiàn)體數(shù)據(jù)塊投影到繪制平面,得到體數(shù)據(jù)塊在繪制平面上的8個(gè)投影點(diǎn),計(jì)算這8個(gè)投影點(diǎn)的最小包圍盒,此包圍盒的面積為計(jì)為S,與當(dāng)前分辨率下體數(shù)據(jù)塊的側(cè)面的面積Rs相比較,如果S>Rs說(shuō)明該體數(shù)據(jù)塊分辨率不足,將當(dāng)前分辨率級(jí)別提高一級(jí),如果此時(shí)已經(jīng)達(dá)到三維地震多分辨體數(shù)據(jù)的最高分辨率級(jí)別,則分辨率選擇結(jié)束,否則,回到步驟1,進(jìn)行高一級(jí)分辨率下的判斷,同時(shí)將本次分辨率判斷的結(jié)果保存下來(lái);如果所有體數(shù)據(jù)塊的S < Rs,則所有體數(shù)據(jù)塊都不再需要提高分辨率,分辨率選擇結(jié)束;如果分辨率判斷結(jié)束后,渲染所需要的體數(shù)據(jù)塊數(shù)量超出顯存所能容納的范圍,則恢復(fù)到上一次選擇的分辨率結(jié)果;由最終確定分辨率的體數(shù)據(jù)塊得到本次渲染需要的體數(shù)據(jù)塊列表;步驟3:判斷需要的體數(shù)據(jù)塊是否被調(diào)度,使用多線程技術(shù)對(duì)需要調(diào)度的體數(shù)據(jù)塊進(jìn)行I/o調(diào)度,并進(jìn)行硬盤(pán)、內(nèi)存、顯存的三級(jí)調(diào)度、緩存管理:對(duì)本次渲染所需要的體數(shù)據(jù)塊列表,先查詢(xún)數(shù)據(jù)管理器所需要的體數(shù)據(jù)塊是否在顯存中,如果在就不需要再重新調(diào)度了,如果不在,先在內(nèi)存緩存中查找,找到后調(diào)度進(jìn)入顯存,如果沒(méi)有找到再?gòu)挠脖P(pán)中查找,然后調(diào)度入顯存;其中,數(shù)據(jù)管理器采用硬盤(pán)一內(nèi)存一顯存的三級(jí)數(shù)據(jù)管理模式,顯存用于存放本次渲染所需要的體數(shù)據(jù)塊,內(nèi)存用于存放本次渲染所需要的體數(shù)據(jù)塊以及緩存數(shù)據(jù),以提高I/o調(diào)度的效率,硬盤(pán)用于存放全部三維地震體數(shù)據(jù);內(nèi)存管理使用“最近最少調(diào)度算法”,在內(nèi)存空間不足時(shí),標(biāo)示為最近未用的體數(shù)據(jù)塊將被淘汰,提供給新進(jìn)入的體數(shù)據(jù)塊使用;步驟4:在I/O調(diào)度的同時(shí),使用CUDA并行技術(shù)對(duì)調(diào)度進(jìn)來(lái)的數(shù)據(jù)進(jìn)行光線投射體繪制:使用光線投射的方法對(duì)待渲染的體數(shù)據(jù)塊進(jìn)行采樣,根據(jù)采樣點(diǎn)所在體數(shù)據(jù)塊使用的分辨率決定采樣步長(zhǎng),每采樣一個(gè)點(diǎn)后增加一個(gè)步長(zhǎng),直到穿透要繪制的體數(shù)據(jù)塊區(qū)域,或超出采樣點(diǎn)數(shù)量;對(duì)采樣得到的數(shù)據(jù)值,按照顏色表計(jì)算得到顏色,再根據(jù)用戶(hù)設(shè)置的透明度值將顏色值累加,得到當(dāng)前采樣射線在繪制平面上的最終投影點(diǎn)的顏色,所有采樣射線的投影點(diǎn)顏色計(jì)算完畢后,繪制平面上就得到了最后的渲染結(jié)果。步驟I中,在判斷體數(shù)據(jù)塊的可見(jiàn)性時(shí),首先讀取三維地震多分辨體數(shù)據(jù)的最低級(jí)別分辨率,根據(jù)這一分辨率下的體數(shù)據(jù)塊數(shù)量生成一張分辨率表,分辨率表的每一個(gè)位置代表一個(gè)體數(shù)據(jù)塊,這個(gè)位置內(nèi)的值代表這個(gè)數(shù)據(jù)塊所采用的分辨率級(jí)別:-1代表此體數(shù)據(jù)塊不可見(jiàn),大于等于零的其他值代表該體數(shù)據(jù)塊所采用的分辨率;初始化時(shí),這張表的大小為最低分辨率下,體數(shù)據(jù)塊的個(gè)數(shù),其值全部為最低分辨率,再根據(jù)這張表和步驟2,不斷更新分辨率表;如果某體數(shù)據(jù)塊可見(jiàn)性判斷結(jié)果為不可見(jiàn),則在生成的分辨率表中,由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊全部設(shè)置為不可見(jiàn),即對(duì)應(yīng)表格位置填-1。
步驟2中,根據(jù)當(dāng)前分辨率表做進(jìn)一步計(jì)算:I)、當(dāng)前體數(shù)據(jù)塊為不可見(jiàn),則不進(jìn)行分辨率選取,直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為-1;2)、當(dāng)前分辨率表中某體數(shù)據(jù)塊的分辨率與分裂后的下一分辨率的差值>1,說(shuō)明在上一次分辨率選取時(shí)該體數(shù)據(jù)塊已經(jīng)不需要再分裂了,則直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為當(dāng)前分辨率表中的值;如果差值=1,則進(jìn)行是否需要提高分辨率的判斷;因?yàn)橄乱环直媛适窃诋?dāng)前分辨率的基礎(chǔ)上加1,所以差值不可能〈I ;3)、當(dāng)前體數(shù)據(jù)塊經(jīng)判斷不需要再提高分辨率,則直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為當(dāng)前體數(shù)據(jù)塊的分辨率值;4)、如果判斷結(jié)束后,發(fā)現(xiàn)沒(méi)有任何體數(shù)據(jù)塊需要提高分辨率,則判斷結(jié)束,最終分辨率表為上一次計(jì)算得到的分辨率表;如果分辨率提升后,需要調(diào)度的體數(shù)據(jù)塊超過(guò)顯存所能容納的數(shù)據(jù)量,判斷結(jié)束,最終分辨率表為上一次計(jì)算得到的分辨率表;當(dāng)分辨率已經(jīng)提升到最高分辨率,判斷結(jié)束,最終分辨率表為當(dāng)前計(jì)算得到的最高分辨率下的分辨率表。步驟3中,采取硬盤(pán)、內(nèi)存、顯存的三級(jí)緩沖技術(shù),并對(duì)顯存上的數(shù)據(jù)進(jìn)行壓縮處理,由原始的float型數(shù)據(jù)轉(zhuǎn)換為byte型數(shù)據(jù),提高一次渲染中可渲染的體數(shù)據(jù)塊個(gè)數(shù)。步驟4中,光線投射的步長(zhǎng)是根據(jù)步驟2生成的分辨率表動(dòng)態(tài)改變的,在渲染不同的體數(shù)據(jù)塊時(shí),查找該體數(shù)據(jù)塊的分辨率表來(lái)設(shè)定步長(zhǎng),渲染時(shí)通過(guò)用戶(hù)設(shè)定的顏色表將顯存中byte類(lèi)型的數(shù)據(jù)轉(zhuǎn)化為RGB顏色值。相對(duì)于現(xiàn)有的海量實(shí)時(shí)體繪制方法,本發(fā)明具有以下優(yōu)點(diǎn):一、能夠?qū)A矿w數(shù)據(jù)進(jìn)行光線投射體繪制,并且可以達(dá)到實(shí)時(shí)繪制的效果;二、設(shè)計(jì)了基于線性數(shù)組的分辨率表描述三維場(chǎng)景,與傳統(tǒng)的樹(shù)形數(shù)據(jù)結(jié)構(gòu)相比,便于在內(nèi)存、顯存中共享數(shù)據(jù),利于使用CUDA并行處理;三、設(shè)計(jì)了分辨率選取算法,結(jié)合基于線性數(shù)組的分辨率表,在一個(gè)渲染場(chǎng)景下,可以有多個(gè)分辨率的體數(shù)據(jù)共同參與繪制,使得繪制效果更加平滑;四、根據(jù)采樣點(diǎn)體數(shù)據(jù)分辨率等級(jí)動(dòng)態(tài)調(diào)整光線投射的采樣步長(zhǎng),使渲染結(jié)果更加準(zhǔn)確;本發(fā)明從數(shù)據(jù)的處理、傳輸、調(diào)用等方面綜合考慮,提出了一種高效的渲染方法,能夠繪制海量數(shù)據(jù),達(dá)到實(shí)時(shí)渲染的效果,成像效果優(yōu)秀。


圖1為本發(fā)明方法的流程圖。圖2為一張可見(jiàn)性與分辨率選取后所得到的分辨率表樣例。圖3為使用多種分辨率渲染的不意圖。圖4為最終渲染效果的示意圖。圖5為過(guò)濾部分顏色的渲染效果示意圖。
具體實(shí)施方式
CUDA是NVIDIA公司的并行計(jì)算架構(gòu),該架構(gòu)通過(guò)利用GPU的處理能力,可大幅提升計(jì)算性能。本發(fā)明方法如圖1所示,主要包括使用CUDA并行技術(shù)進(jìn)行體數(shù)據(jù)塊是否可見(jiàn)的判斷;使用CUDA并行技術(shù)判斷體數(shù)據(jù)塊當(dāng)前分辨率是否需要提高,以確定最終渲染時(shí),各體數(shù)據(jù)塊所使用的分辨率,并生成本次渲染需要的體數(shù)據(jù)塊列表;判斷需要的體數(shù)據(jù)塊是否被調(diào)度,使用多線程技術(shù)對(duì)需要調(diào)度的體數(shù)據(jù)塊進(jìn)行I/O調(diào)度,并進(jìn)行硬盤(pán)、內(nèi)存、顯存的三級(jí)調(diào)度、緩存管理;在I/o調(diào)度的同時(shí),使用CUDA并行技術(shù)對(duì)調(diào)度進(jìn)來(lái)的數(shù)據(jù)進(jìn)行光線投射體繪制四個(gè)步驟。下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說(shuō)明:步驟1:使用CUDA并行技術(shù)進(jìn)行體數(shù)據(jù)塊是否可見(jiàn)的判斷在當(dāng)前渲染場(chǎng)景下,根據(jù)繪圖程序接口 OpenGL當(dāng)前的ModelView矩陣和Projection矩陣計(jì)算出可見(jiàn)視錐的6個(gè)面,用來(lái)判斷體數(shù)據(jù)塊是否出現(xiàn)在可見(jiàn)視錐中,SP當(dāng)前分辨率下體數(shù)據(jù)塊是否可見(jiàn),其中ModelView矩陣指查詢(xún)模型視圖,Projection矩陣指投影矩陣。每個(gè)體數(shù)據(jù)塊都是規(guī)則的正方體而且每條邊都與坐標(biāo)軸平行,所以可以將視錐視為AABB包圍盒,判斷體數(shù)據(jù)塊8個(gè)頂點(diǎn)中的positive頂點(diǎn)和negative頂點(diǎn)是否在視錐中,從而判斷該體數(shù)據(jù)塊是否出現(xiàn)在視錐中。這里包圍盒算法是一種求解離散點(diǎn)集最優(yōu)包圍空間的方法,AABB包圍盒(Axis-aligned bounding box)定義為包含該對(duì)象,且邊平行于坐標(biāo)軸的最小六面體。對(duì)三維地震數(shù)據(jù)的空間描述中,高一級(jí)分辨率下,用8個(gè)體數(shù)據(jù)塊來(lái)表示低一級(jí)分辨率下的一個(gè)數(shù)據(jù)塊。X,Y,Z方向分別由I個(gè)塊擴(kuò)展為2個(gè)塊。在這種描述下,某一分辨率下的體數(shù)據(jù)塊如果不可見(jiàn),那么在高一級(jí)分辨率下,由它分裂出的8個(gè)體數(shù)據(jù)塊一定不可見(jiàn);如果該體數(shù)據(jù)塊可見(jiàn),由它分裂出的8個(gè)體數(shù)據(jù)塊還要分辨判斷可見(jiàn)性。步驟2:使用CUDA并行技術(shù)判斷體數(shù)據(jù)塊當(dāng)前分辨率是否需要提高,以確定最終渲染時(shí),各體數(shù)據(jù)塊所使用的分辨率,并生成本次渲染需要的體數(shù)據(jù)塊列表。判斷當(dāng)前分辨率是否滿(mǎn)足需求時(shí),先計(jì)算在視錐中的數(shù)據(jù)塊投影到屏幕后長(zhǎng)方形包圍盒的面積S,與當(dāng)前分辨率下體數(shù)據(jù)塊的側(cè)面的面積Rs相比較,如果S>Rs說(shuō)明分辨率不足,有提高空間,則提高一級(jí)分辨率,回到步驟1,進(jìn)行高一級(jí)分辨率下的判斷,同時(shí)將本次分辨率判斷的結(jié)果保存下來(lái)。判斷開(kāi)始前,先生成最低級(jí)分辨率表,所有塊設(shè)置為可見(jiàn),并使用最低分辨率,如果存在不可見(jiàn)塊,則會(huì)在下一級(jí)可見(jiàn)性判斷時(shí)修正為不可見(jiàn),分辨率的值也會(huì)在分辨率選擇階段得到修正。如果所有體數(shù)據(jù)塊都不再需要提高分辨率,則分辨率選擇結(jié)束;如果本次分辨率判斷結(jié)束后,所需要的塊超出顯存所能容納的范圍,則恢復(fù)到上一次選擇的結(jié)果;如果本次判斷已經(jīng)到達(dá)最高一級(jí)分辨率,則分辨率選擇結(jié)束。由此得到本次渲染需要的體數(shù)據(jù)塊列表。其中步驟I中,在判斷體數(shù)據(jù)塊的可見(jiàn)性時(shí),首先讀取三維地震多分辨體數(shù)據(jù)的最低級(jí)別分辨率,根據(jù)這一分辨率下的體數(shù)據(jù)塊數(shù)量生成一張分辨率表,分辨率表的每一個(gè)位置代表一個(gè)體數(shù)據(jù)塊,這個(gè)位置內(nèi)的值代表這個(gè)數(shù)據(jù)塊所采用的分辨率級(jí)別:-1代表此體數(shù)據(jù)塊不可見(jiàn),大于等于零的其他值代表該體數(shù)據(jù)塊所采用的分辨率;初始化時(shí),這張表的大小為最低分辨率下,體數(shù)據(jù)塊的個(gè)數(shù),其值全部為最低分辨率,再根據(jù)這張表和步驟2,不斷更新分辨率表;如果某體數(shù)據(jù)塊可見(jiàn)性判斷結(jié)果為不可見(jiàn),則在生成的分辨率表中,由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊全部設(shè)置為不可見(jiàn),即對(duì)應(yīng)表格位置填-1。步驟2根據(jù)當(dāng)前分辨率表做進(jìn)一步計(jì)算:I)、當(dāng)前體數(shù)據(jù)塊為不可見(jiàn),則不進(jìn)行分辨率選取,直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為-1;2)、當(dāng)前分辨率表中某體數(shù)據(jù)塊的分辨率級(jí)別與判斷選擇后的下一分辨率級(jí)別的差值>1,說(shuō)明在上一次分辨率選取時(shí)該體數(shù)據(jù)塊已經(jīng)不需要再分裂了,則直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為當(dāng)前分辨率表中的級(jí)別值;如果級(jí)別差值=1,則進(jìn)行是否需要提高分辨率的判斷;因?yàn)橄乱环直媛适窃诋?dāng)前分辨率的基礎(chǔ)上加1,所以差值不可能〈I;3)、當(dāng)前體數(shù)據(jù)塊經(jīng)判斷不需要再提高分辨率,則直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為當(dāng)前體數(shù)據(jù)塊的分辨率級(jí)別值;4)、如果判斷結(jié)束后,發(fā)現(xiàn)沒(méi)有任何體數(shù)據(jù)塊需要提高分辨率,則判斷結(jié)束,最終分辨率表為上一次計(jì)算得到的分辨率表;如果分辨率提升后,需要調(diào)度的體數(shù)據(jù)塊超過(guò)顯存所能容納的數(shù)據(jù)量,判斷結(jié)束,最終分辨率表為上一次計(jì)算得到的分辨率表;當(dāng)分辨率已經(jīng)提升到最高分辨率,判斷結(jié)束,最終分辨率表為當(dāng)前計(jì)算得到的最高分辨率下的分辨率表。如圖2所示,即為分辨率表的一個(gè)示例。如圖3所示,表示了在一個(gè)場(chǎng)景下,不同分辨率等級(jí)的體數(shù)據(jù)塊選擇的結(jié)果。離視點(diǎn)近的使用高分辨率,離視點(diǎn)遠(yuǎn)的使用低分辨率,符合客觀事實(shí)。由圖3可以看出整個(gè)場(chǎng)景中的體數(shù)據(jù)塊根據(jù)投影面積的大小,選擇了 3個(gè)不同分辨率等級(jí),說(shuō)明了本發(fā)明中分辨率選取算法的效果。步驟3:判斷需要的體數(shù)據(jù)塊是否被調(diào)度,使用多線程技術(shù)對(duì)需要調(diào)度的體數(shù)據(jù)塊進(jìn)行I/o調(diào)度,并進(jìn)行硬盤(pán)、內(nèi)存、顯存的三級(jí)調(diào)度、緩存管理。對(duì)本次渲染所需要的數(shù)據(jù)列表,先查詢(xún)數(shù)據(jù)管理器所需要的塊是否在顯存中,如果在就不需要再?gòu)恼{(diào)度了,如果不在,先在內(nèi)存緩沖中查找,找到后調(diào)度進(jìn)入顯存,沒(méi)有找到就從硬盤(pán)中調(diào)度。為了程序的效率,顯存中的數(shù)據(jù)是對(duì)硬盤(pán)中的數(shù)據(jù)加以映射得到的,按照硬盤(pán)數(shù)據(jù)的取值范圍,將float類(lèi)型的原始值映射為byte類(lèi)型值存儲(chǔ)在顯存上,提高一次渲染中可渲染的體數(shù)據(jù)塊個(gè)數(shù)。數(shù)據(jù)管理采用硬盤(pán)一內(nèi)存一顯存的三級(jí)數(shù)據(jù)管理模式。顯存上存放本次渲染所需要的數(shù)據(jù)塊,內(nèi)存上存放本次渲染所需要的數(shù)據(jù)塊以及緩存數(shù)據(jù),以提高I/o調(diào)度的效率,硬盤(pán)上則是全部多分辨體數(shù)據(jù)。內(nèi)存管理使用“最近最少調(diào)度算法”,在內(nèi)存空間不足時(shí),標(biāo)示為最近未用的塊將被淘汰,提供給新進(jìn)入的塊使用。步驟4:在I/O調(diào)度的同時(shí),使用CUDA并行技術(shù)對(duì)調(diào)度進(jìn)來(lái)的數(shù)據(jù)進(jìn)行光線投射體繪制。使用光線投射的方法對(duì)待渲染的體數(shù)據(jù)塊進(jìn)行采樣,根據(jù)采樣點(diǎn)所在體數(shù)據(jù)塊使用的分辨率決定采樣步長(zhǎng),每采樣一個(gè)點(diǎn)后增加一個(gè)步長(zhǎng),直到穿透要繪制的體數(shù)據(jù)塊區(qū)域,或超出采樣點(diǎn)數(shù)量;對(duì)采樣得到的數(shù)據(jù)值,按照顏色表計(jì)算得到顏色,再根據(jù)用戶(hù)設(shè)置的透明度值將顏色值累加,得到當(dāng)前采樣射線在繪制平面上的最終投影點(diǎn)的顏色,所有采樣射線的投影點(diǎn)顏色計(jì)算完畢后,繪制平面上就得到了最后的渲染結(jié)果。其中,光線投射的步長(zhǎng)是根據(jù)步驟2生成的分辨率表動(dòng)態(tài)改變的,在渲染不同的體數(shù)據(jù)塊時(shí),查找該體數(shù)據(jù)塊的分辨率表來(lái)設(shè)定步長(zhǎng)。在采樣中,得到的是映射后的byte類(lèi)型值,我們?cè)俑鶕?jù)用戶(hù)的顏色映射表,將此byte值轉(zhuǎn)換為RGB顏色值。通過(guò)這一步,可以過(guò)濾掉我們不需要繪制的屬性值。如圖4,為我們得到的最終渲染結(jié)果,光線投射體繪制算法最終的渲染結(jié)果,根據(jù)渲染后的顏色,能夠很好的反映三維地震體數(shù)據(jù)所表示的地質(zhì)樣貌。如圖5,為過(guò)濾掉部分顏色的結(jié)果,其中綠色已經(jīng)被過(guò)濾掉,渲染結(jié)果中已不再繪制需要過(guò)濾掉的屬性值。
權(quán)利要求
1.一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,其特征是使用CUDA并行技術(shù)對(duì)三維地震多分辨體數(shù)據(jù)進(jìn)行實(shí)時(shí)渲染,包括以下步驟: 步驟1:使用CUDA并行技術(shù)進(jìn)行當(dāng)前分辨率下體數(shù)據(jù)塊是否可見(jiàn)的判斷: 在當(dāng)前渲染場(chǎng)景下,根據(jù)繪圖程序接口 OpenGL當(dāng)前的ModelView矩陣和Projection矩陣計(jì)算出視錐的6個(gè)面,用來(lái)判斷當(dāng)前分辨率下體數(shù)據(jù)塊是否出現(xiàn)在可見(jiàn)視錐中,SP當(dāng)前分辨率下體數(shù)據(jù)塊是否可見(jiàn):將視錐視為AABB包圍盒,判斷體數(shù)據(jù)塊8個(gè)頂點(diǎn)中的positive頂點(diǎn)和negative頂點(diǎn)是否在視錐中,從而判斷該體數(shù)據(jù)塊是否出現(xiàn)在視錐中;所述的計(jì)算和判斷利用CUDA并行技術(shù)并行化; 如果當(dāng)前分辨率級(jí)別未設(shè)置,將當(dāng)前分辨率級(jí)別初始化為三維地震多分辨體數(shù)據(jù)的最低分辨率級(jí)別; 步驟2:使用CUDA并行技術(shù)判斷可見(jiàn)體數(shù)據(jù)塊的當(dāng)前分辨率是否滿(mǎn)足需求,以確定最終渲染時(shí),各可見(jiàn)體數(shù)據(jù)塊所使用的分辨率,并生成本次渲染需要的體數(shù)據(jù)塊列表: 判斷當(dāng)前分辨率是否滿(mǎn)足需求時(shí),先將可見(jiàn)體數(shù)據(jù)塊投影到繪制平面,得到體數(shù)據(jù)塊在繪制平面上的8個(gè)投影點(diǎn),計(jì)算這8個(gè)投影點(diǎn)的最小包圍盒,此包圍盒的面積為計(jì)為S,與當(dāng)前分辨率下體數(shù)據(jù)塊的側(cè)面的面積Rs相比較,如果S>Rs說(shuō)明該體數(shù)據(jù)塊分辨率不足,將當(dāng)前分辨率級(jí)別提高一級(jí),如果此時(shí)已經(jīng)達(dá)到三維地震多分辨體數(shù)據(jù)的最高分辨率級(jí)別,則分辨率選擇結(jié)束,否則,回到步驟1,進(jìn)行高一級(jí)分辨率下的判斷,同時(shí)將本次分辨率判斷的結(jié)果保存下來(lái); 如果所有體數(shù)據(jù)塊的S ( Rs,則所有體數(shù)據(jù)塊都不再需要提高分辨率,分辨率選擇結(jié)束; 如果分辨率判斷結(jié)束后,渲染所需要的體數(shù)據(jù)塊數(shù)量超出顯存所能容納的范圍,則恢復(fù)到上一次選擇的分辨率結(jié)果; 由最終確定分辨率的體數(shù)據(jù)塊得到本次渲染需要的體數(shù)據(jù)塊列表; 步驟3:判斷需要的體數(shù)據(jù)塊是否被調(diào)度,使用多線程技術(shù)對(duì)需要調(diào)度的體數(shù)據(jù)塊進(jìn)行I/O調(diào)度,并進(jìn)行硬盤(pán)、內(nèi)存、顯存的三級(jí)調(diào)度、緩存管理: 對(duì)本次渲染所需要的體數(shù)據(jù)塊列表,先查詢(xún)數(shù)據(jù)管理器所需要的體數(shù)據(jù)塊是否在顯存中,如果在就不需要再重新調(diào)度了,如果不在,先在內(nèi)存緩存中查找,找到后調(diào)度進(jìn)入顯存,如果沒(méi)有找到再?gòu)挠脖P(pán)中查找,然后調(diào)度入顯存; 其中,數(shù)據(jù)管理器采用硬盤(pán)一內(nèi)存一顯存的三級(jí)數(shù)據(jù)管理模式,顯存用于存放本次渲染所需要的體數(shù)據(jù)塊,內(nèi)存用于存放本次渲染所需要的體數(shù)據(jù)塊以及緩存數(shù)據(jù),以提高I/O調(diào)度的效率,硬盤(pán)用于存放全部三維地震體數(shù)據(jù); 內(nèi)存管理使用“最近最少調(diào)度算法”,在內(nèi)存空間不足時(shí),標(biāo)示為最近未用的體數(shù)據(jù)塊將被淘汰,提供給新進(jìn)入的體數(shù)據(jù)塊使用; 步驟4:在I/O調(diào)度的同時(shí),使用CUDA并行技術(shù)對(duì)調(diào)度進(jìn)來(lái)的數(shù)據(jù)進(jìn)行光線投射體繪制: 使用光線投射的方法對(duì)待 渲染的體數(shù)據(jù)塊進(jìn)行采樣,根據(jù)采樣點(diǎn)所在體數(shù)據(jù)塊使用的分辨率決定采樣步長(zhǎng),每采樣一個(gè)點(diǎn)后增加一個(gè)步長(zhǎng),直到穿透要繪制的體數(shù)據(jù)塊區(qū)域,或超出采樣點(diǎn)數(shù)量;對(duì)采樣得到的數(shù)據(jù)值,按照顏色表計(jì)算得到顏色,再根據(jù)用戶(hù)設(shè)置的透明度值將顏色值累加,得到當(dāng)前采樣射線在繪制平面上的最終投影點(diǎn)的顏色,所有采樣射線的投影點(diǎn)顏色計(jì)算完畢后,繪制平面上就得到了最后的渲染結(jié)果。
2.根據(jù)權(quán)利要求1所述的一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,其特征是步驟I中,在判斷體數(shù)據(jù)塊的可見(jiàn)性時(shí),首先讀取三維地震多分辨體數(shù)據(jù)的最低級(jí)別分辨率,根據(jù)這一分辨率下的體數(shù)據(jù)塊數(shù)量生成一張分辨率表,分辨率表的每一個(gè)位置代表一個(gè)體數(shù)據(jù)塊,這個(gè)位置內(nèi)的值代表這個(gè)數(shù)據(jù)塊所采用的分辨率級(jí)別:-1代表此體數(shù)據(jù)塊不可見(jiàn),大于等于零的其他值代表該體數(shù)據(jù)塊所采用的分辨率;初始化時(shí),這張表的大小為最低分辨率下,體數(shù)據(jù)塊的個(gè)數(shù),其值全部為最低分辨率,再根據(jù)這張表和步驟2,不斷更新分辨率表;如果某體數(shù)據(jù)塊可見(jiàn)性判斷結(jié)果為不可見(jiàn),則在生成的分辨率表中,由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊全部設(shè)置為不可見(jiàn),即對(duì)應(yīng)表格位置填-1。
3.根據(jù)權(quán)利要求2所述的一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,其特征是步驟2中,根據(jù)當(dāng)前分辨率表做進(jìn)一步計(jì)算: 1)、當(dāng)前體數(shù)據(jù)塊為不可見(jiàn),則不進(jìn)行分辨率選取,直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為-1 ; 2)、當(dāng)前分辨率表中某體數(shù)據(jù)塊的分辨率與分裂后的下一分辨率的差值>1,說(shuō)明在上一次分辨率選取時(shí)該體數(shù)據(jù)塊已經(jīng)不需要再分裂了,則直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為當(dāng)前分辨率表中的值;如果差值=1,則進(jìn)行是否需要提高分辨率的判斷; 3)、當(dāng)前體數(shù)據(jù)塊經(jīng)判斷不需要再提高分辨率,則直接在更新分辨率表時(shí)將由該體數(shù)據(jù)塊分裂而得的體數(shù)據(jù)塊所對(duì)應(yīng)的位置全部設(shè)置為當(dāng)前體數(shù)據(jù)塊的分辨率值; 4)、如果判斷結(jié)束后,發(fā)現(xiàn)沒(méi)有任何體數(shù)據(jù)塊需要提高分辨率,則判斷結(jié)束,最終分辨率表為上一次計(jì)算得到的分辨率表;如果分辨率提升后,需要調(diào)度的體數(shù)據(jù)塊超過(guò)顯存所能容納的數(shù)據(jù)量,判斷結(jié)束,最終分辨率表為上一次計(jì)算得到的分辨率表;當(dāng)分辨率已經(jīng)提升到最高分辨率,判斷結(jié)束,最終分辨率表為當(dāng)前計(jì)算得到的最高分辨率下的分辨率表。
4.根據(jù)權(quán)利要求1或2或3所述的一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,其特征是步驟3中,采取硬盤(pán)、內(nèi)存、顯存的三級(jí)緩沖技術(shù),并對(duì)顯存上的數(shù)據(jù)進(jìn)行壓縮處理,由原始的float型數(shù)據(jù)轉(zhuǎn)換為byte型數(shù)據(jù),提高一次渲染中可渲染的體數(shù)據(jù)塊個(gè)數(shù)。
5.根據(jù)權(quán)利要求2或3所述的一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,其特征是步驟4中,光線投射的步長(zhǎng)是根據(jù)步驟2生成的分辨率表動(dòng)態(tài)改變的,在渲染不同的體數(shù)據(jù)塊時(shí),查找該體數(shù)據(jù)塊的分辨率表來(lái)設(shè)定步長(zhǎng),渲染時(shí)通過(guò)用戶(hù)設(shè)定的顏色表將顯存中byte類(lèi)型的數(shù)據(jù)轉(zhuǎn)化為RGB顏色值。
6.根據(jù)權(quán)利要求4所述的一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,其特征是步驟4中,光線投射的步長(zhǎng)是根據(jù)步驟2生成的分辨率表動(dòng)態(tài)改變的,在渲染不同的體數(shù)據(jù)塊時(shí),查找該體數(shù)據(jù)塊的分辨率表來(lái)設(shè)定步長(zhǎng),渲染時(shí)通過(guò)用戶(hù)設(shè)定的顏色表將顯存中byte類(lèi)型的數(shù)據(jù)轉(zhuǎn)化為RGB顏色值。
全文摘要
一種三維地震體數(shù)據(jù)的實(shí)時(shí)光線投射體繪制方法,使用CUDA并行技術(shù)進(jìn)行體數(shù)據(jù)塊是否可見(jiàn)的判斷,再使用CUDA并行技術(shù)判斷體數(shù)據(jù)塊當(dāng)前分辨率是否需要提高,以上兩步從低分辨率開(kāi)始循環(huán),逐步提高分辨率,直到滿(mǎn)足分辨率要求、顯存不足無(wú)法提高分辨率或已經(jīng)達(dá)到最高分辨率為止,以確定最終渲染時(shí)體數(shù)據(jù)塊各自所使用的分辨率;在渲染處理中使用多線程技術(shù)對(duì)需要調(diào)度的體數(shù)據(jù)塊進(jìn)行I/O調(diào)度,同時(shí)使用CUDA并行技術(shù)對(duì)調(diào)度進(jìn)來(lái)的數(shù)據(jù)進(jìn)行光線投射體繪制。相對(duì)于現(xiàn)有的光線體繪制方法,本發(fā)明可適用于海量體數(shù)據(jù)實(shí)時(shí)體繪制、可以在一個(gè)場(chǎng)景下有多個(gè)分辨率等級(jí)的數(shù)據(jù)參與繪制,計(jì)算速度快、成像效果好。
文檔編號(hào)G06T15/08GK103198514SQ201310097258
公開(kāi)日2013年7月10日 申請(qǐng)日期2013年3月25日 優(yōu)先權(quán)日2013年3月25日
發(fā)明者魯林, 唐杰, 武港山 申請(qǐng)人:南京大學(xué)
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
湖口县| 读书| 高雄市| 赞皇县| 洛隆县| 文昌市| 武安市| 崇文区| 登封市| 漠河县| 无极县| 渝北区| 祁门县| 时尚| 封开县| 崇礼县| 大竹县| 永修县| 平武县| 灌南县| 乐业县| 汉寿县| 兰西县| 建瓯市| 嘉定区| 泰兴市| 灌云县| 玛沁县| 荔波县| 万盛区| 武邑县| 抚远县| 柘荣县| 江津市| 晋州市| 静安区| 石嘴山市| 星座| 马尔康县| 休宁县| 靖边县|