李 航, 黨 崗, 程志全, 金士堯
(國(guó)防科技大學(xué)并行與分布處理國(guó)防科技重點(diǎn)實(shí)驗(yàn)室,湖南 長(zhǎng)沙 410073)
紋理映射是一種增加多邊形模型細(xì)節(jié)外觀的非常有效和高效的技術(shù)。但目前廣泛使用的2D紋理映射有著很大的局限性,它需要將網(wǎng)格參數(shù)化、即分配給每個(gè)網(wǎng)格頂點(diǎn)一個(gè)2D紋理坐標(biāo)來(lái)完成。通常這一參數(shù)化過(guò)程是非常困難的,而且會(huì)帶來(lái)扭曲和裂縫,特別是在含有隱含表面、細(xì)分表面等的復(fù)雜網(wǎng)格上。
與2D紋理相比,3D紋理通過(guò)將紋理定義在包圍物體的體上來(lái)避免2D參數(shù)化。3D體紋理的優(yōu)勢(shì)在于其紋理坐標(biāo)能程序化自動(dòng)產(chǎn)生,而且在任意精度下的采樣都是均勻的。其缺點(diǎn)也很明顯,占用的內(nèi)存隨著立方體分辨率的提高而急劇增加,在高分辨率的需求下幾乎是難以實(shí)現(xiàn)的。
八叉樹(shù)紋理是體紋理的一種變形,它只對(duì)體的子集與模型表面相交的那一部分進(jìn)行存儲(chǔ),形成了一種稀疏紋理,大大節(jié)省了存儲(chǔ)空間。在GPU上實(shí)現(xiàn)八叉樹(shù)紋理后,通過(guò)硬件協(xié)助,使紋理的查找速度進(jìn)一步加快,實(shí)時(shí)性得到提高。在原有的低分辨率、小內(nèi)存占用情況下,如果用戶想進(jìn)行高分辨率的繪畫(huà),雖然可以將分辨率提高到相應(yīng)水平來(lái)達(dá)到目的,但是由于體紋理的特性,內(nèi)存的需求將上升的非??欤?/p>
本文提出了一種基于 GPU加速的、可變局部分辨率的、實(shí)現(xiàn)實(shí)時(shí)繪畫(huà)的自適應(yīng)八叉樹(shù)紋理繪畫(huà)算法。本文的實(shí)現(xiàn)將需要高分辨率的細(xì)節(jié)繪畫(huà)部分與其他部分區(qū)別對(duì)待,只在需要的部位創(chuàng)建高分辨率紋理,進(jìn)一步節(jié)省了存儲(chǔ)空間。
在下面的章節(jié)中,本文將首先概述相關(guān)工作,而后闡述一種新型的自適應(yīng)八叉樹(shù)紋理映射機(jī)制(第二部分),進(jìn)而說(shuō)明其基于GPU實(shí)現(xiàn)的方法(第三部分)。在給出實(shí)驗(yàn)結(jié)果并加以分析(第四部分)后,本文最后對(duì)工作進(jìn)行總結(jié)。
紋理映射一詞最早由Catmull[1]提出,其實(shí)質(zhì)是從二維紋理平面到三維模型表面的一個(gè)映射。在立體紋理的概念出現(xiàn)后,因?yàn)轶w紋理坐標(biāo)能自動(dòng)生成,人們從手工賦予模型坐標(biāo)的繁瑣工作中解脫出來(lái)。但用體紋理進(jìn)行高品質(zhì)紋理建模將占用大量存儲(chǔ)空間,因此3D紋理的發(fā)展速度比較緩慢。
八叉樹(shù)是一種規(guī)則的層次數(shù)據(jù)結(jié)構(gòu)。樹(shù)的第一個(gè)節(jié)點(diǎn)即根節(jié)點(diǎn),是一個(gè)立方體。每個(gè)節(jié)點(diǎn)有8個(gè)子節(jié)點(diǎn)或者沒(méi)有子節(jié)點(diǎn),且這8個(gè)子節(jié)點(diǎn)是對(duì)父節(jié)點(diǎn)的一個(gè)2×2×2的規(guī)則細(xì)分。其中,不含有子節(jié)點(diǎn)的叫做葉節(jié)點(diǎn)。在一個(gè)包含了3D模型的八叉樹(shù)中,那些包含了模型表面的節(jié)點(diǎn)被更細(xì)致地劃分,而余下的空節(jié)點(diǎn)則成為了葉節(jié)點(diǎn)。八叉樹(shù)每個(gè)維度每細(xì)分一次,其分辨率都將增大到原來(lái)的兩倍。因此,要達(dá)到一個(gè)256×256×256的分辨率,總共需要 8層(28=256)。自適應(yīng)八叉樹(shù)則是在模型的不同區(qū)域有著不同的分辨率或者說(shuō)樹(shù)深度,其樹(shù)深度大的地方能表現(xiàn)更詳細(xì)、更真實(shí)的圖像效果。
SIGGRAPH2002會(huì)議上David Benson和Joel Davis[2]撰文提出了一種用八叉樹(shù)實(shí)現(xiàn)紋理映射的方法,David DeBry[3]等人的文章也獨(dú)立發(fā)展了一種近似于用八叉樹(shù)實(shí)現(xiàn)紋理映射的方法。到了現(xiàn)在,在GPU上實(shí)現(xiàn)八叉樹(shù)紋理[4]后,八叉樹(shù)紋理的性能得到了進(jìn)一步提高。相比體紋理,用八叉樹(shù)結(jié)構(gòu)來(lái)存儲(chǔ)紋理時(shí),顏色只存儲(chǔ)在物體表面與體相交的地方,因此可以減少內(nèi)存需求,而且在物體表面的采樣也是均勻的。雖然對(duì)于大數(shù)據(jù)量的模型來(lái)說(shuō),八叉樹(shù)紋理仍然會(huì)因占用了太多存儲(chǔ)空間而被限制使用,甚至不可實(shí)現(xiàn),但作為圖形硬件上所用的通用數(shù)據(jù)結(jié)構(gòu)[5]之一,八叉樹(shù)還是有著很重要的作用和廣闊的應(yīng)用空間。近年針對(duì)八叉樹(shù)的不足,已出現(xiàn)了如分塊的混合八叉樹(shù)[6]、GPU加速的八叉樹(shù)體繪制[7]等從不同角度對(duì)八叉樹(shù)進(jìn)行改善的方法。
指定深度的規(guī)則八叉樹(shù),其分辨率在用戶使用前已經(jīng)固定下來(lái)?,F(xiàn)在考慮這樣一個(gè)問(wèn)題:低分辨率情況下,在一個(gè)全白色的模型上畫(huà)一個(gè)很小的紅色點(diǎn),其尺寸遠(yuǎn)小于葉節(jié)點(diǎn)的尺寸時(shí),會(huì)出現(xiàn)什么樣的情況。一種可能是在葉節(jié)點(diǎn)中進(jìn)行簡(jiǎn)單的判斷,將這很少量的紅色拋棄;還有一種可能是通過(guò)線性插值將紅色和白色混合在一起,形成粉色;或者干脆將整個(gè)葉節(jié)點(diǎn)變成了紅色。但無(wú)論出現(xiàn)哪種情況,都是嚴(yán)重的失真。要保持紅色點(diǎn)的細(xì)節(jié),只有將該處的八叉樹(shù)紋理分辨率提高,也即將該處葉節(jié)點(diǎn)進(jìn)行細(xì)分,直到新葉節(jié)點(diǎn)的大小適合于紅色點(diǎn)。
根據(jù)不同的細(xì)節(jié)表現(xiàn)要求,將不同區(qū)域的分辨率自動(dòng)設(shè)置成所需的程度,規(guī)則八叉樹(shù)便變?yōu)樽赃m應(yīng)八叉樹(shù)。
先以低分辨率建立一個(gè)原始八叉樹(shù),即細(xì)分所有與物體表面相交的節(jié)點(diǎn),直到葉節(jié)點(diǎn)為空或者達(dá)到了選擇的深度(包含顏色的節(jié)點(diǎn))。最初分辨率在程序中指定,可設(shè)為一個(gè)較小的值,比如43或83,這樣包含顏色信息的葉節(jié)點(diǎn)深度只有2或 3。然后根據(jù)光標(biāo)的繪畫(huà)位置開(kāi)始構(gòu)建自適應(yīng)八叉樹(shù)并最終上色,偽代碼如下所示:
首先獲得畫(huà)筆繪畫(huà)位置的屏幕坐標(biāo),然后參照模型獲得物體表面要上色的點(diǎn)的空間坐標(biāo),再找出空間坐標(biāo)位于哪個(gè)葉節(jié)點(diǎn),然后遞歸細(xì)分節(jié)點(diǎn);這里利用程序的重復(fù)性,在每次細(xì)分后再找到要進(jìn)行下次細(xì)分的葉節(jié)點(diǎn),依次循環(huán)下去;達(dá)到用戶指定的分辨率水平后,將葉節(jié)點(diǎn)上色。
這樣做在達(dá)到合適分辨率的同時(shí),還最大限度的節(jié)省了存儲(chǔ)空間。自適應(yīng)八叉樹(shù)的建立過(guò)程如圖1所示。
圖1 框架結(jié)構(gòu)圖
占用過(guò)多的內(nèi)存是限制3D紋理廣泛應(yīng)用的主要原因。雖然八叉樹(shù)是一種稀疏的數(shù)據(jù)結(jié)構(gòu),八叉樹(shù)中那些不包含物體表面的節(jié)點(diǎn)不需再進(jìn)行細(xì)分,只有與物體表面相交的葉節(jié)點(diǎn)中存儲(chǔ)了數(shù)據(jù),但是要達(dá)到和通用的2D紋理同樣的效果,仍需要將八叉樹(shù)紋理的分辨率提到比較高的層次,其存儲(chǔ)空間的迅速膨脹依然是個(gè)很嚴(yán)重的問(wèn)題。與此相比,自適應(yīng)八叉樹(shù)紋理能較好的緩解內(nèi)存開(kāi)銷問(wèn)題。
比較一下體紋理、八叉樹(shù)紋理和自適應(yīng)八叉樹(shù)紋理的存儲(chǔ)開(kāi)銷。對(duì)于傳統(tǒng)的體紋理,當(dāng)分辨率為256×256×256時(shí),每個(gè)體元素中存儲(chǔ)一組RGBA 值,占用的空間就是 256×256×256×4B=64M。達(dá)到同樣的分辨率需要一個(gè)深度為 8的八叉樹(shù),不妨假設(shè)八叉樹(shù)的每個(gè)節(jié)點(diǎn)都只有4個(gè)子節(jié)點(diǎn)和物體的表面相交,另4個(gè)子節(jié)點(diǎn)為空,那么八叉樹(shù)中包含的節(jié)點(diǎn)數(shù)為
每個(gè)節(jié)點(diǎn)存儲(chǔ)8組RGBA值,則占用的存儲(chǔ)空間約為 683K??梢钥闯霰绕饌鹘y(tǒng)的體紋理,八叉樹(shù)紋理已經(jīng)節(jié)省了大部分存儲(chǔ)空間。而對(duì)于自適應(yīng)八叉樹(shù)紋理,假設(shè)最初樹(shù)深度只有2,考慮兩個(gè)極端情況:一是在物體表面只畫(huà)一個(gè)分辨率為 256×256的點(diǎn),另一種是用這樣的點(diǎn)畫(huà)滿整個(gè)物體表面。容易看出后一種情況就變回到常規(guī)的八叉樹(shù)紋理,無(wú)需再算。下面計(jì)算第一種情況:初始時(shí),樹(shù)節(jié)點(diǎn)個(gè)數(shù)為5。每次細(xì)分時(shí),一個(gè)葉節(jié)點(diǎn)下產(chǎn)生8個(gè)子葉節(jié)點(diǎn),最后得到的總節(jié)點(diǎn)數(shù)為5+8×6=53個(gè),占用空間1.7K。那么最大深度為 8的自適應(yīng)八叉樹(shù)占用的存儲(chǔ)空間就在1.7K到683K之間。對(duì)于繪畫(huà)青花瓷這類只在少數(shù)部位有高細(xì)節(jié)表現(xiàn)的物體來(lái)說(shuō),使用自適應(yīng)八叉樹(shù)來(lái)存儲(chǔ)紋理將最大限度的節(jié)省存儲(chǔ)開(kāi)銷。
GPU(Graphic Processing Units,圖形處理單元)驅(qū)動(dòng)3D圖形進(jìn)入了新的復(fù)興時(shí)代?,F(xiàn)代的高級(jí)編程語(yǔ)言聯(lián)合難以置信的并行計(jì)算能力,可以輕易地完成實(shí)時(shí)的模糊陰影、精確的照明模型和真實(shí)的材質(zhì)影響。傳統(tǒng)上在程序中用語(yǔ)句遍歷八叉樹(shù)進(jìn)行查找是個(gè)比較慢的過(guò)程,而在 GPU上實(shí)現(xiàn)八叉樹(shù)后,紋理的查找速度大幅提高,實(shí)時(shí)繪畫(huà)才能較好的實(shí)現(xiàn)。
在 CPU上實(shí)現(xiàn)八叉樹(shù)的一個(gè)很簡(jiǎn)單的辦法是用指針將節(jié)點(diǎn)連接在一起,每個(gè)節(jié)點(diǎn)包含一個(gè)指向其子節(jié)點(diǎn)的指針數(shù)組,葉節(jié)點(diǎn)中則只包含數(shù)據(jù)而沒(méi)有指針。每個(gè)節(jié)點(diǎn)包含8個(gè)指針,指向其子節(jié)點(diǎn)。
在 GPU上實(shí)現(xiàn)八叉樹(shù)與此相似,只是將指針變?yōu)榱思y理中的索引,索引被編碼成RGB值。葉節(jié)點(diǎn)的RGB值則干脆直接存儲(chǔ)在其父節(jié)點(diǎn)的索引中,并用Alpha通道來(lái)區(qū)分某個(gè)子節(jié)點(diǎn)中存儲(chǔ)的到底是索引還是葉節(jié)點(diǎn)的 RGB值。換句話說(shuō),節(jié)點(diǎn)中存儲(chǔ)的要么是用于指向其子節(jié)點(diǎn)的RGB值(即索引)、要么就是其葉節(jié)點(diǎn)的 RGB值(即數(shù)據(jù))。本文的實(shí)現(xiàn)同樣需要依賴紋理查詢(dependent texture lookup)。自適應(yīng)八叉樹(shù)和規(guī)則八叉樹(shù)在存儲(chǔ)方式和 GPU實(shí)現(xiàn)等方面都是類似的,下文中提到的八叉樹(shù)紋理則泛指包含自適應(yīng)八叉樹(shù)紋理在內(nèi)的一般意義上的八叉樹(shù)紋理。
本文采取的方法是把八叉樹(shù)存儲(chǔ)在一個(gè)8位的RGBA 3D紋理中,這種紋理叫做間接池。間接池中的最小存儲(chǔ)元素叫做單元,每個(gè)單元存儲(chǔ)一組RGBA值(索引或者數(shù)據(jù)值)。間接池又被細(xì)分為間接?xùn)鸥?,間接?xùn)鸥袷怯?×2×2個(gè)單元組成的立方體,那么每個(gè)間接?xùn)鸥窬捅硎疽粋€(gè)樹(shù)節(jié)點(diǎn),它對(duì)應(yīng)于CPU實(shí)現(xiàn)中每個(gè)樹(shù)節(jié)點(diǎn)包含的8個(gè)指針。每個(gè)間接?xùn)鸥竦膯卧梢允强盏?,或者為以下情況之一:
(1)如果相應(yīng)的子節(jié)點(diǎn)為葉節(jié)點(diǎn),則單元中存儲(chǔ)的是數(shù)據(jù)值;
(2)如果相應(yīng)的子節(jié)點(diǎn)為另一個(gè)非葉的子節(jié)點(diǎn),則單元中存儲(chǔ)的是一個(gè)間接?xùn)鸥竦乃饕?/p>
圖2展示了間接池中八叉樹(shù)的存儲(chǔ)結(jié)構(gòu),第一個(gè)間接?xùn)鸥裰械?個(gè)有色子塊表示存儲(chǔ)的是索引,后3個(gè)間接?xùn)鸥竦母鲉卧鶎?duì)應(yīng)的子節(jié)點(diǎn)是葉節(jié)點(diǎn),存儲(chǔ)的是數(shù)據(jù)值。
圖2 間接池存儲(chǔ)結(jié)構(gòu)示意圖
為了清晰起見(jiàn),在圖中將間接?xùn)鸥穹蛛x開(kāi)來(lái),而在實(shí)際的存儲(chǔ)結(jié)構(gòu)中間接?xùn)鸥袷沁B續(xù)的。
如果用戶想得到256×256×256的分辨率,就要設(shè)置間接池中的間接?xùn)鸥駛€(gè)數(shù)為128×128× 128,這樣間接池中的單元的分辨率就是(2×128)×(2×128)×(2×128)。
前面已提到,在單元中,數(shù)據(jù)和子節(jié)點(diǎn)索引都是存儲(chǔ)為RGB元組的形式。Alpha通道則作為區(qū)分單元內(nèi)容的標(biāo)志。Alpha=1表明是數(shù)據(jù),Alpha=0.5表明是索引,Alpha=0表明是空節(jié)點(diǎn)。八叉樹(shù)的根節(jié)點(diǎn)就存儲(chǔ)在間接池的(0,0,0)處。
把八叉樹(shù)存儲(chǔ)在紋理存儲(chǔ)器中之后,需要在片段程序中對(duì)它進(jìn)行訪問(wèn)。和標(biāo)準(zhǔn)的3D紋理一樣,樹(shù)把紋理定義在單位立方體中。如果希望獲得在樹(shù)中某點(diǎn)M處存儲(chǔ)的紋理值,那么要從樹(shù)的根節(jié)點(diǎn)開(kāi)始,順序訪問(wèn)包含M點(diǎn)的節(jié)點(diǎn),直到葉節(jié)點(diǎn)為止。
對(duì)于某個(gè)深度D,完全樹(shù)會(huì)在單位立方體內(nèi)產(chǎn)生分辨率為 2D×2D×2D的規(guī)則柵格。把該柵格叫做深度D柵格,樹(shù)在深度D的每個(gè)節(jié)點(diǎn)都對(duì)應(yīng)于該柵格的一個(gè)單元,顯然M也位于深度為D的被訪問(wèn)節(jié)點(diǎn)所對(duì)應(yīng)的單元中。設(shè)M在該單元中的相對(duì)坐標(biāo)為(XD,YD,ZD),該單元在樹(shù)中的坐標(biāo)即為被訪問(wèn)節(jié)點(diǎn)間接?xùn)鸥竦乃饕齀D,再設(shè)間接池中間接?xùn)鸥竦膫€(gè)數(shù)為S,用這些參數(shù)可得到間接池中的查找坐標(biāo)
然后得到了間接池中 P點(diǎn)所存儲(chǔ)的 RGBA值。根據(jù)Alpha通道的值判斷,如果子節(jié)點(diǎn)是葉節(jié)點(diǎn),將會(huì)返回RGB值,否則就表明存儲(chǔ)的值是索引,把 RGB值作為該子節(jié)點(diǎn)的間接?xùn)鸥竦乃饕齀D+1,并繼續(xù)查找下一個(gè)樹(shù)深度。圖3為樹(shù)層數(shù)為3時(shí)的間接池查找過(guò)程示意。
樹(shù)的深度是有一定限制的,對(duì)于1024×1024分辨率的顯示器來(lái)說(shuō),深度 10已經(jīng)是硬件能支持的最大值,因?yàn)榇藭r(shí)已經(jīng)達(dá)到了像素級(jí)水平,再增加深度已經(jīng)沒(méi)有意義。
所以每次查找的紋理訪問(wèn)次數(shù)也是有限的,對(duì)于最大深度為8的自適應(yīng)八叉樹(shù),顯然最多只需要8次訪問(wèn)就可以找到間接池中的目標(biāo)點(diǎn)了。
圖3 紋理查找過(guò)程
隨著幾何體表面積的增加,八叉樹(shù)的節(jié)點(diǎn)數(shù)會(huì)大幅度增加,占用的存儲(chǔ)空間也會(huì)越來(lái)越多,對(duì)于有海量數(shù)據(jù)的模型來(lái)說(shuō),八叉樹(shù)紋理也是不可實(shí)現(xiàn)的。所以目前3D紋理主要應(yīng)用于較小型的物體上。而由于對(duì)不同區(qū)域采用了不同的分辨率,只占幾何體一小部分的高細(xì)節(jié)部位才需要較多的節(jié)點(diǎn),自適應(yīng)八叉樹(shù)紋理能較好的用于部分大型模型。
針對(duì)表面積較大的 Mouse模型和表面積較小的Laddy模型,本文的實(shí)現(xiàn)對(duì)比了使用固定深度的規(guī)則八叉樹(shù)和使用自適應(yīng)八叉樹(shù)進(jìn)行繪畫(huà)時(shí)兩者的占用存儲(chǔ)空間、建樹(shù)時(shí)間、指定的最大深度等數(shù)據(jù),如表1和圖4所示。
當(dāng)樹(shù)深度指定為9或10時(shí),由于節(jié)點(diǎn)數(shù)量過(guò)于龐大,即使對(duì)于表面積較小的Laddy模型,Matt Pharr[4]的實(shí)現(xiàn)程序在構(gòu)建規(guī)則八叉樹(shù)時(shí)經(jīng)過(guò) 30多分鐘仍未得到結(jié)果,而本文的實(shí)現(xiàn)在構(gòu)建自適應(yīng)八叉樹(shù)時(shí)則不存在這個(gè)問(wèn)題。
此外在樹(shù)深度較小時(shí),規(guī)則八叉樹(shù)不能進(jìn)行很理想的細(xì)節(jié)繪畫(huà),因?yàn)榇藭r(shí)的樹(shù)節(jié)點(diǎn)不能很好的近似匹配物體表面,繪畫(huà)時(shí)的鋸齒現(xiàn)象比較嚴(yán)重。
表1 規(guī)則八叉樹(shù)和自適應(yīng)八叉樹(shù)的相關(guān)數(shù)據(jù)
本文提出了一種 GPU上的自適應(yīng)八叉樹(shù)紋理算法:利用自適應(yīng)八叉樹(shù)來(lái)存儲(chǔ)紋理信息,達(dá)到在局部進(jìn)行細(xì)節(jié)表現(xiàn)的目的,更進(jìn)一步節(jié)省了存儲(chǔ)空間;同時(shí)經(jīng)過(guò) GPU加速,實(shí)現(xiàn)了細(xì)節(jié)實(shí)時(shí)繪畫(huà)。實(shí)驗(yàn)結(jié)果表明,使用自適應(yīng)八叉樹(shù)紋理,在相同的最大分辨率情況下比規(guī)則八叉樹(shù)紋理占用了更小的存儲(chǔ)空間,也可在更高的分辨率水平上進(jìn)行比較理想的細(xì)節(jié)繪畫(huà),甚至是像素級(jí)的逐點(diǎn)繪畫(huà)。從而,本文改進(jìn)了八叉樹(shù)紋理的構(gòu)建和存儲(chǔ),同時(shí)利用了 GPU加速,很大程度上解決了八叉樹(shù)紋理自適應(yīng)分辨率的局限,實(shí)現(xiàn)了自適應(yīng)分辨率的實(shí)時(shí)繪畫(huà)。
本文提出的這種自適應(yīng)八叉樹(shù)紋理繪畫(huà)算法還有以下幾個(gè)需要優(yōu)化的方向:一是剛開(kāi)始繪畫(huà)時(shí)的延時(shí)比較嚴(yán)重,因?yàn)樵谧畛蹰_(kāi)始繪畫(huà)時(shí)要進(jìn)行適應(yīng)分辨率的節(jié)點(diǎn)細(xì)分和新建存儲(chǔ),相當(dāng)于將最初的構(gòu)建八叉樹(shù)紋理的時(shí)間分散到繪畫(huà)步驟中去,雖然極大的節(jié)省了最初構(gòu)建八叉樹(shù)紋理的時(shí)間,但是部分影響到了繪畫(huà)時(shí)的實(shí)時(shí)性。二是本文的實(shí)現(xiàn)依然沒(méi)有解決模型中非常接近或相交的表面的處理問(wèn)題,例如皮膚和衣服。
圖4 實(shí)驗(yàn)結(jié)果
[1]Catmull E E. A subdivision algorithm for computer display of curved surfaces [D]. University of Utah,1974.
[2]David Benson, Joel Davis. Octree textures [C]//Proceedings of SIGGRAPH 02, 2002: 785-790.
[3]DeBry D, Gibbs J, Petty D, et al. Painting and rendering textures on unparameterized models [C]//Proceedings of SIGGRAPH 02, 2002: 763-768.
[4]Matt Pharr. GPU精粹2[M]. 北京: 清華大學(xué)出版社,2007. 425-438.
[5]Lefohn A E. Glift: generic data structures for graphics hardware [D]. University of California, 2006.
[6]張傳明, 潘 懋, 徐繪宏. 基于分塊混合八叉樹(shù)編碼的海量體視化研究[J]. 計(jì)算機(jī)工程, 2007, 33(14):33-35.
[7]蘇超軾, 趙明昌, 張向文. GPU加速的八叉樹(shù)體繪制算法[J]. 計(jì)算機(jī)應(yīng)用, 2008, 28(5): 1232-1235, 1239.