專利名稱:一種基于金字塔四叉樹的紋理映射方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一般的圖像數(shù)據(jù)處理或產(chǎn)生,尤其涉及一種基于金字塔四叉樹的紋理映射方法。
背景技術(shù):
在繪制系統(tǒng)中,紋理映射可以不通過增加物體的復(fù)雜性,而使得場景細(xì)節(jié)顯得更加豐富,使得場景更真實(shí)。對于大規(guī)模地形的繪制,需要一個(gè)好的紋理映射方式,實(shí)現(xiàn)紋理的實(shí)時(shí)映射,解決大規(guī)模地形場景的實(shí)時(shí)漫游的技術(shù)問題,包括解決紋理數(shù)據(jù)的存儲和傳輸問題,紋理走樣問題,提高繪制畫面的質(zhì)量。
David Cline采用紋理四叉樹來表示大規(guī)模紋理,可參考[Cline 1998]DavidCline and Parris K.Egbert,“Interactive Display Of Very Large Textures,”inProceedings of IEEE Visualization′98,October 1998,pp.343-350,每個(gè)紋理采用固定分辨率表示,不同層次的紋理表示覆蓋的區(qū)域不同,在幾何繪制時(shí),需要根據(jù)繪制的多邊形的大小選取四叉樹中合適的紋理。若沒有合適的紋理,則暫選取粗糙的紋理,并把該紋理插入一個(gè)隊(duì)列,進(jìn)行統(tǒng)一的調(diào)度。這樣,雖然利用了視域的連貫性,但是可能無法滿足當(dāng)前所需要的顯示精度,影響顯示質(zhì)量。并且對每一個(gè)紋理結(jié)點(diǎn),沒有采用Mipmap的方式,由于多邊形不可能剛好對應(yīng)于紋理四叉樹中的某個(gè)層次,從而導(dǎo)致紋理走樣現(xiàn)象。在數(shù)據(jù)的調(diào)度上,該方法也沒有利用四叉樹父子結(jié)點(diǎn)之間的重復(fù)信息,來進(jìn)行數(shù)據(jù)的累進(jìn)調(diào)度。
Dollner在地形繪制中采用幾何和紋理的多分辨繪制,可參考[Dollner2000]Jurgen Dollner,Konstantin Baumann,and Klaus Hinrichs,“Texturing Techniques forTerrain Visualization”,IEEE Visualization 2000,207-234,Oct.2000,在幾何上采用離散的層次細(xì)節(jié)樹,同樣對紋理也建立層次樹,在繪制時(shí),根據(jù)屏幕的顯示要求,選取不同層次的幾何和紋理進(jìn)行繪制。
Blow在高細(xì)節(jié)的地形繪制中也采用紋理四叉樹,可參考[Blow2000]Jonathan Blow,“Terrain Rendering at High Levels of Detail”,Proceedings of the2000 Game Developers Conference,Mar.2000,并結(jié)合幾何的二叉樹表示,進(jìn)行紋理的選擇。該方法需要基于每個(gè)三角形的幾何選取所需要的紋理,有可能會在多個(gè)紋理之間切換,而導(dǎo)致系統(tǒng)性能的下降。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的不足,本發(fā)明的目的在于提供一種基于金字塔四叉樹的紋理映射方法。本方法可以將紋理數(shù)據(jù)實(shí)時(shí)地映射到相應(yīng)的地形上,提高大規(guī)模地形漫游時(shí)的顯示畫面質(zhì)量,而且還能利用硬件的金字塔反走樣技術(shù),解決大紋理映射時(shí)產(chǎn)生走樣現(xiàn)象的問題。
為達(dá)到上述目的,本發(fā)明采用的技術(shù)方案如下包括以下四個(gè)步驟1)紋理的金字塔四叉樹表示將紋理圖像數(shù)據(jù)表示成紋理四叉樹,把紋理四叉樹的每個(gè)結(jié)點(diǎn)表示的紋理數(shù)據(jù)組織成紋理金字塔,建立了紋理圖像數(shù)據(jù)的紋理金字塔四叉樹表示;2)紋理金字塔四叉樹結(jié)點(diǎn)的壓縮利用紋理圖像相鄰的紋理象素之間的連貫性,對紋理金字塔進(jìn)行壓縮,使得紋理數(shù)據(jù)的傳輸和存儲量減少;3)紋理金字塔四叉樹結(jié)點(diǎn)的選取對于每個(gè)地形網(wǎng)格根據(jù)三角形在屏幕上的投影面積來確定相應(yīng)的紋理金字塔四叉樹結(jié)點(diǎn);4)紋理金字塔四叉樹結(jié)點(diǎn)的裝載對于已經(jīng)選取而且不在紋理內(nèi)存中的紋理金字塔四叉樹結(jié)點(diǎn)數(shù)據(jù)按照一定的策略從硬盤或系統(tǒng)內(nèi)存中裝載到紋理內(nèi)存,完成地形場景的繪制。
紋理金字塔四叉樹結(jié)點(diǎn)的壓縮就是將原紋理金字塔四叉樹結(jié)點(diǎn)存儲的數(shù)據(jù)進(jìn)行變換,減少數(shù)據(jù)的存儲量,同時(shí)保證變換后的紋理數(shù)據(jù)可以使用逆變換得到原數(shù)據(jù)。
本發(fā)明與背景技術(shù)相比,其優(yōu)點(diǎn)在于本發(fā)明采用紋理金字塔四叉樹映射方法,可以有效地利用有限的紋理內(nèi)存,減少紋理數(shù)據(jù)的傳輸量,實(shí)現(xiàn)從硬盤到系統(tǒng)內(nèi)存,再從系統(tǒng)內(nèi)存到紋理內(nèi)存的數(shù)據(jù)調(diào)度,能有效地提高大規(guī)模地形帶紋理繪制的畫面質(zhì)量,并且能利用硬件的金字塔反走樣技術(shù),解決大紋理映射產(chǎn)生走樣現(xiàn)象的問題。
下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步說明。
圖1是本發(fā)明方法的流程圖;圖2是紋理四叉樹表示;圖3是紋理金字塔表示;圖4是紋理的降低分辨率過程表示;圖5是紋理的提高分辨率過程表示;圖6是紋理的區(qū)域矢量化表示。
具體實(shí)施例方式
如圖1所示,本發(fā)明提出的一種基于金字塔四叉樹的紋理映射方法,包括紋理的金字塔四叉樹表示、紋理金字塔四叉樹結(jié)點(diǎn)的壓縮、紋理金字塔四叉樹結(jié)點(diǎn)的選取和紋理金字塔四叉樹結(jié)點(diǎn)的裝載四個(gè)步驟。流程如圖1所表示首先讀取紋理數(shù)據(jù),將紋理數(shù)據(jù)表示成紋理的金字塔四叉樹,然后對紋理金字塔四叉樹結(jié)點(diǎn)進(jìn)行壓縮;對于每個(gè)地形網(wǎng)絡(luò)選取相應(yīng)的紋理金字塔四叉樹結(jié)點(diǎn),把不在紋理內(nèi)存中的紋理結(jié)點(diǎn)數(shù)據(jù)裝載入紋理內(nèi)存,最后完成帶紋理的地形場景的繪制。
現(xiàn)具體介紹本方法的四個(gè)步驟1)紋理的金字塔四叉樹表示對于大規(guī)模紋理圖象,其圖象大小可以定義為2n×2n,其中n為正整數(shù)。首先將大規(guī)模紋理圖象表示成紋理四叉樹。紋理四叉樹的構(gòu)建過程如下紋理四叉樹的根結(jié)點(diǎn)對應(yīng)覆蓋整個(gè)地形方形區(qū)域,其大小為2n×2n,它的四個(gè)子結(jié)點(diǎn)分別表示它的四分之一地域,其大小均為2n-1×2n-1,而這四個(gè)子結(jié)點(diǎn)的分辨率與根結(jié)點(diǎn)相同,根結(jié)點(diǎn)是四個(gè)子結(jié)點(diǎn)的父結(jié)點(diǎn)。對這四個(gè)子結(jié)點(diǎn)進(jìn)行同樣的操作,每個(gè)結(jié)點(diǎn)均產(chǎn)生四個(gè)子結(jié)點(diǎn),該過程不斷進(jìn)行,直到原始紋理的最精細(xì)分辨率,即結(jié)點(diǎn)的大小為1×1。因此在紋理四叉樹中,父子結(jié)點(diǎn)覆蓋的地形區(qū)域重疊,每個(gè)結(jié)點(diǎn)與其四個(gè)子結(jié)點(diǎn)覆蓋的地域相同。圖2給出了最初三層的四叉樹結(jié)點(diǎn),圖2a表示了原始紋理圖象(0,0),由它進(jìn)行四叉樹剖分,如圖2b有四個(gè)子結(jié)點(diǎn)(0,0),(0,1),(1,0),(1,1),這四個(gè)子結(jié)點(diǎn)和圖2a覆蓋的區(qū)域是相同的;對每個(gè)子結(jié)點(diǎn)再進(jìn)行剖分,就得到了圖2c。
對于以上面方法產(chǎn)生的紋理四叉樹的每個(gè)結(jié)點(diǎn)存儲的紋理,再組織成紋理金字塔。
紋理金字塔的組織方式如下假設(shè)紋理四叉樹結(jié)點(diǎn)紋理圖象大小為固定大小2m×2m,m為非負(fù)整數(shù)。紋理從原始圖象開始,不斷地從高分辨率圖象中取多個(gè)象素求其紋理顏色值的平均,生成低分辨率圖象的一個(gè)象素,構(gòu)成分辨率從高到低的一組圖象。原始分辨率圖象及各級低分辨圖象被存儲到多個(gè)表中。這樣該紋理四叉樹結(jié)點(diǎn)存儲著同一紋理圖象,分辨率為1×1到2m×2m的紋理數(shù)據(jù)的紋理金字塔。如圖3所示的紋理金字塔,圖象的分辨率為8×8,4×4,2×2,1×1,分辨率不斷下降,紋理圖象越來越模糊。
按照如上方法,就可以實(shí)現(xiàn)紋理圖象的紋理的金字塔四叉樹表示。
1)紋理金字塔四叉樹結(jié)點(diǎn)的壓縮對于大規(guī)模紋理數(shù)據(jù)的處理,減少紋理的存儲量是很重要的。由步驟1所表示的紋理金字塔數(shù)據(jù)量是原紋理數(shù)據(jù)的16/9倍。
由于紋理圖象相鄰的紋理象素之間具有某種連貫性,所以可以對紋理金字塔進(jìn)行壓縮有效地減少數(shù)據(jù)冗余,使得紋理的表示更為緊湊。
假設(shè)紋理金字塔四叉樹結(jié)點(diǎn)存儲分辨率為1×1到2m×2m的一系列紋理數(shù)據(jù)。對這些紋理數(shù)據(jù),分辨率為1×1到32×32的數(shù)據(jù)不進(jìn)行壓縮,對64×64到2m×2m的紋理數(shù)據(jù)進(jìn)行矢量化壓縮,壓縮的方法如下所述如圖4所示,gm(i,j)為原始紋理圖象,分辨率為2m×2m,fm(i,j)是gm通過一濾波算子生成的結(jié)果圖象。然后對濾波產(chǎn)生的圖象進(jìn)行重新采樣,采樣頻率是原來的1/2,產(chǎn)生下一層次的圖象gm-1(i,j),這個(gè)變換過程是降低分辨率的過程。通過對圖象gm(i,j)不斷執(zhí)行該過程,一直到最后所生成分辨率為1×1的圖象g0,這一系列的g(i,j)組成紋理金字塔。迭代過程可以用以下式子表示gl-1=REDUCE(gl)其中層數(shù)0<l≤m,m是紋理金字塔總的層數(shù),REDUCE為降低分辨率的過程。圖4給出這個(gè)過程的一個(gè)圖示,gm執(zhí)行了兩次降低分辨率的過程,從gm變成gm-1,又由gm-1變成gm-2,分辨率變成了原圖的1/4。
如圖5所示,這個(gè)操作的逆過程為提高分辨率的過程EXPAND,對M×N的圖象作用生成2M×2N的圖象。圖5給出了一個(gè)提高分辯率的過程,gm執(zhí)行了兩次提高分辨率的過程,從gm變成gm+1,又由gm+1變成gm+2,分辨率提高到原圖的4倍。但是在執(zhí)行REDUCE變換將高分辨率圖象降為低分辨圖象過程中有部分紋理細(xì)節(jié)損失,用EXP AND函數(shù)生成的紋理很難完全恢復(fù)到原有的信息,它與原有的高一級分辨率紋理之間存在誤差,它們之間的誤差定義為Ll=gl-EXPAND(gl-1)其中0<1<m,最后一層1×1的圖象g0,由于沒有粗糙分辨率的圖象,記L0=g0。
假設(shè)該紋理金字塔四叉樹結(jié)點(diǎn)在上述操作之前存儲的紋理金字塔為(g0,g1,…,gm),在執(zhí)行了上述操作之后存儲的紋理金字塔可表示為(g0,g1,g2,g3,g4,g5,L6,…,Lm)。
本發(fā)明進(jìn)一步對誤差圖象lk進(jìn)行壓縮編碼,可以采用任何圖象壓縮方法。我們使用LBG矢量化壓縮方法對誤差圖象lk進(jìn)行壓縮編碼。LBG算法是一個(gè)常用的方法,可參考[Linde1980]Y.Linde,A.Buzo,and R.M.Gray,“An Algorithmfor Vector Quantizer Design”.IEEE Transactions on Communications,1702--710,1980,該方法可以應(yīng)用于多維數(shù)據(jù),LBG矢量化算法從初始的碼本出發(fā),初始的編碼值是所有需要編碼的數(shù)據(jù)平均值,這個(gè)編碼值加減一個(gè)微小擾動分裂成兩個(gè)初始的編碼值,再對原始數(shù)據(jù)集進(jìn)行訓(xùn)練生成新的編碼值,采用這種迭代方式,每一次的編碼數(shù)據(jù)增加一倍,直到編碼個(gè)數(shù)達(dá)到所指定的個(gè)數(shù)。
取一定大小的圖象子區(qū)域進(jìn)行矢量量化,這些圖象子區(qū)域使用相同的編碼索引。如圖6所示,選取4×4的圖象子區(qū)域編碼512×512的RGB紋理,子區(qū)域的各象素RGB共有4×4×3=48bytes。采用256個(gè)不同取值的編碼本,取同一碼值的子區(qū)域各象素使用同一個(gè)索引值,每個(gè)索引值用1byte表示,則總共需要的索引值為512×512/(4×4),可以達(dá)到48∶1的壓縮率。由于還需要記錄編碼本的信息,總共需要4×4×256個(gè)RGB的值,實(shí)際的壓縮率為27.4∶1,這是對單一紋理的壓縮值。對于最精細(xì)分辨率為512×512的紋理金字塔,每個(gè)象素用RGB表示,需占用紋理空間為512×512×3×4/3=1024K,通過對金字塔紋理進(jìn)行逐層遞歸矢量化,就可以有效地壓縮所需要的紋理空間,為了防止累進(jìn)壓縮時(shí)誤差的累積,本發(fā)明計(jì)算誤差圖象的方法是,將EXPAND恢復(fù)的圖象與正確的紋理圖象對應(yīng)象素作差運(yùn)算。當(dāng)紋理分辨率小于32×32時(shí),矢量化壓縮方法無效,因此,本方法對紋理金字塔中分辨率為32×32到1×1的紋理不進(jìn)行矢量化。這樣壓縮后紋理的數(shù)據(jù)總量為74K,壓縮率可達(dá)到13.8∶1。
在圖象解碼時(shí),對于層次多分辨率的紋理,當(dāng)需要導(dǎo)入高一層分辨率的紋理數(shù)據(jù)gk,可以通過低一層的紋理數(shù)據(jù)gk-1拉伸到圖象fk,在通過gk=fk+codebook(index)來恢復(fù)數(shù)據(jù)。codebook是指誤差圖象lk矢量量化后的顏色值。
2)紋理金字塔四叉樹結(jié)點(diǎn)的選取在進(jìn)行地形三角形網(wǎng)格繪制時(shí),需要根據(jù)地形三角形網(wǎng)格在屏幕上的投影面積來確定紋理分辨率,然后確定相應(yīng)的紋理金字塔四叉樹結(jié)點(diǎn)。為了能保證紋理映射的質(zhì)量,按照金字塔繪制的策略,所取的屏幕象素和紋理象素的比例接近1∶1。通過公式計(jì)算屏幕空間的半徑為rs=λ×rcosφd,]]>其中 w是視域廣角的象素個(gè)數(shù),r為物體空間的包圍球半徑,d為視點(diǎn)到包圍體的最近距離,φ為法向與視點(diǎn)到頂點(diǎn)方向的夾角。
為了提高紋理映射的效率,當(dāng)相近區(qū)域的地形三角形網(wǎng)格在屏幕空間的象素和紋理象素比例相近時(shí),可以使用同一紋理四叉樹結(jié)點(diǎn)進(jìn)行映射。這些地形三角形網(wǎng)格稱為同一族地形三角形網(wǎng)格,它們在屏幕空間的最大半徑通過下式rs=λ×rcos(max(0,φ-v))d]]>進(jìn)行計(jì)算。計(jì)算地形三角形網(wǎng)格在紋理空間的半徑rt,可用以下式子rt2=Area(T)/Area(Q)×rQ2。其中Area(T)為地形三角形T的面積,Area(Q)為紋理金字塔四叉樹結(jié)點(diǎn)Q覆蓋區(qū)域的面積,rQ為紋理金字塔四叉樹結(jié)點(diǎn)的象素分辨率。當(dāng)rt≤rs并且2rt>rs時(shí),該紋理金字塔四叉樹結(jié)點(diǎn)剛好是所需要的紋理,否則需要往上遍歷父結(jié)點(diǎn)(若rt>rs),或者往下遍歷子結(jié)點(diǎn)(若2rt<rs),尋找合適的紋理金字塔四叉樹結(jié)點(diǎn)。
3)紋理金字塔四叉樹結(jié)點(diǎn)的裝載為了保證實(shí)時(shí)獲取紋理,紋理金字塔四叉樹的根結(jié)點(diǎn)始終保存在紋理內(nèi)存中。在紋理映射的過程中,當(dāng)?shù)匦稳切尉W(wǎng)格所選的紋理金字塔四叉樹結(jié)點(diǎn)不在紋理內(nèi)存時(shí),向上搜索紋理金字塔四叉樹得到其在紋理內(nèi)存中的父結(jié)點(diǎn),進(jìn)行紋理映射,而把該結(jié)點(diǎn)放到一數(shù)據(jù)調(diào)度隊(duì)列,從硬盤和系統(tǒng)內(nèi)存調(diào)度數(shù)據(jù)。當(dāng)紋理數(shù)據(jù)從硬盤裝載到內(nèi)存中時(shí),需要對壓縮的紋理進(jìn)行解碼。當(dāng)裝載數(shù)據(jù)超出規(guī)定的存儲空間時(shí),需要釋放內(nèi)存和紋理內(nèi)存中原存儲的部分?jǐn)?shù)據(jù),在系統(tǒng)內(nèi)存中的數(shù)據(jù)采用最近最少使用策略,即根據(jù)上一次數(shù)據(jù)調(diào)度數(shù)據(jù)使用的時(shí)間最早的先釋放,而對紋理內(nèi)存中的數(shù)據(jù),使用改進(jìn)的最近最少使用策略,紋理金字塔四叉樹結(jié)點(diǎn)的優(yōu)先級由下式給出pd=f/(l+1)其中,f是紋理金字塔四叉樹結(jié)點(diǎn)最近一次調(diào)用的幀序號,l是紋理金字塔四叉樹結(jié)點(diǎn)的層數(shù),pd越小的紋理結(jié)點(diǎn)的數(shù)據(jù)最先剔除。
在實(shí)施時(shí),系統(tǒng)內(nèi)存和紋理內(nèi)存開辟固定大小的容量,紋理內(nèi)存大小設(shè)為總的圖形硬件支持大小的1/2,而系統(tǒng)內(nèi)存開辟大小為總的1/3。
權(quán)利要求
1.一種基于金字塔四叉樹的紋理映射方法,其特征在于包括以下四個(gè)步驟1)紋理的金字塔四叉樹表示將紋理圖像數(shù)據(jù)表示成紋理四叉樹,把紋理四叉樹的每個(gè)結(jié)點(diǎn)表示的紋理數(shù)據(jù)組織成紋理金字塔,建立了紋理圖像數(shù)據(jù)的紋理金字塔四叉樹表示;2)紋理金字塔四叉樹結(jié)點(diǎn)的壓縮利用紋理圖像相鄰的紋理象素之間的連貫性,對紋理金字塔進(jìn)行壓縮,使得紋理數(shù)據(jù)的傳輸和存儲量減少;3)紋理金字塔四叉樹結(jié)點(diǎn)的選取對于每個(gè)地形網(wǎng)格根據(jù)三角形在屏幕上的投影面積來確定相應(yīng)的紋理金字塔四叉樹結(jié)點(diǎn);4)紋理金字塔四叉樹結(jié)點(diǎn)的裝載對于已經(jīng)選取而且不在紋理內(nèi)存中的紋理金字塔四叉樹結(jié)點(diǎn)數(shù)據(jù)按照一定的策略從硬盤或系統(tǒng)內(nèi)存中裝載到紋理內(nèi)存,完成地形場景的繪制。
2.根據(jù)權(quán)利要求1所述的一種基于金字塔四叉樹的紋理映射方法,其特征在于,紋理金字塔四叉樹結(jié)點(diǎn)的壓縮就是將原紋理金字塔四叉樹結(jié)點(diǎn)存儲的數(shù)據(jù)進(jìn)行變換,減少數(shù)據(jù)的存儲量,同時(shí)保證變換后的紋理數(shù)據(jù)可以使用逆變換得到原數(shù)據(jù)。
全文摘要
本發(fā)明公開了一種基于金字塔四叉樹的紋理映射方法。該方法包括紋理的金字塔四叉樹表示、紋理金字塔四叉樹結(jié)點(diǎn)的壓縮、紋理金字塔四叉樹結(jié)點(diǎn)的選取和紋理金字塔四叉樹結(jié)點(diǎn)的裝載四個(gè)步驟。本發(fā)明很好地結(jié)合了紋理四叉樹和紋理金字塔的優(yōu)點(diǎn),同時(shí)還對紋理數(shù)據(jù)進(jìn)行了壓縮,可以有效地利用有限的紋理內(nèi)存,實(shí)現(xiàn)大規(guī)模地形紋理數(shù)據(jù)從硬盤到系統(tǒng)內(nèi)存,再從系統(tǒng)內(nèi)存到紋理內(nèi)存的數(shù)據(jù)調(diào)度,由于紋理數(shù)據(jù)進(jìn)行了壓縮和對系統(tǒng)內(nèi)存和紋理內(nèi)存進(jìn)行最近最少使用的調(diào)度方式,減少了各存儲之間的傳輸量。故本方法可以將紋理數(shù)據(jù)實(shí)時(shí)地映射到相應(yīng)的地形上,提高大規(guī)模地形漫游時(shí)的顯示畫面質(zhì)量,而且還能利用硬件的金字塔反走樣技術(shù),解決大紋理映射時(shí)產(chǎn)生走樣現(xiàn)象的問題。
文檔編號G06T1/00GK1547162SQ20031010917
公開日2004年11月17日 申請日期2003年12月5日 優(yōu)先權(quán)日2003年12月5日
發(fā)明者華煒, 陸艷青, 周棟, 鮑虎軍, 華 煒 申請人:浙江大學(xué)