專利名稱:響應(yīng)數(shù)據(jù)率受限三維圖形數(shù)據(jù)迅速繪制圖象的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種響應(yīng)于三維圖形數(shù)據(jù)繪制圖象的方法和裝置,特別涉及一種響應(yīng)于有限數(shù)據(jù)率的諸如網(wǎng)絡(luò)的環(huán)境中的三維圖形數(shù)據(jù)來繪制圖象的方法和裝置。
背景技術(shù):
由于在個人計算機和其他圖形處理設(shè)備、例如視頻游戲中的計算能力的提高,三維計算機圖形(3D圖形)技術(shù)正變得越來越普遍。因特網(wǎng)越來越多地用于傳送包括3D圖形的內(nèi)容。家庭個人計算機(PC)用戶可以從因特網(wǎng)下載3D圖形數(shù)據(jù),并且可以使用瀏覽器來繪制、顯示這些內(nèi)容并與其交互。
3D圖形的繪制技術(shù)已經(jīng)被開發(fā)了很長時間。最新的技術(shù)已經(jīng)在可以插進在家庭PC中使用的圖形適配器中的擴展硬件中實現(xiàn)。PC和圖形硬件的性能上的提高使得可以繪制的圖形的復(fù)雜性增大。然而,當(dāng)3D圖形數(shù)據(jù)的來源是具有有限數(shù)據(jù)傳輸率的網(wǎng)絡(luò)時,當(dāng)由圖形數(shù)據(jù)表示的圖象很復(fù)雜時,對于3D圖形數(shù)據(jù)需要長的下載時間。因特網(wǎng)就是這種網(wǎng)絡(luò)的一個例子。已知的可以在與網(wǎng)絡(luò)相連的客戶機上運行的瀏覽器程序在能夠開始執(zhí)行響應(yīng)于3D圖形數(shù)據(jù)顯示圖象所必須的圖形繪制計算之前需要將幾乎全部3D圖形數(shù)據(jù)從服務(wù)器上下載下來。其結(jié)果為,用戶在圖象開始顯示之前必須等待大部分下載時間。常規(guī)3D圖形繪制程序的處理結(jié)構(gòu)使得在這種程序開始顯示圖象之前有一個長的延遲。
在3D圖形中,定義了具有一個或多個三維對象的三維空間。還定義了三維空間中每個對象上的基準點的位置。每個對象的形狀由一組覆蓋對象表面的多邊形定義。例如,等邊立方體可以用六個方多邊形(正方形)定義,每個正方形等于立方體的一個面。為每個多邊形定義尺寸、形狀和坐標。另外,還可以定義顏色和反射率。然而,如果對象的一個表面的全部或部分帶有圖案,則表示該表面的多邊形必須分成多個子多邊形,以便可以通過向子多邊形分配不同的顏色和反射率來表示該圖案。這相當(dāng)大地增大了表示該對象所需的數(shù)據(jù)量。
因此,如果將要以不止為基本的圖案形成來繪制對象的表面,則最好用紋理定義表面的外觀(appearance)。紋理是一組表示從基本位圖到復(fù)雜圖象的任意復(fù)雜度的圖案的數(shù)據(jù)。該組數(shù)據(jù)可以包括例如定義圖案的圖象映射數(shù)據(jù)。表示其外觀由紋理定義的對象的表面部分的多邊形采用紋理來平鋪顯示。在采用紋理時,具有復(fù)雜表面外觀的對象可以用比采用增大數(shù)目的多邊形表示該表面所需要的數(shù)據(jù)更少的數(shù)據(jù)來表示。
當(dāng)具有三維對象的三維空間被顯示為二維屏幕、例如計算機監(jiān)視器的屏幕上的圖象時,首先由用戶選擇一個視點或由圖形數(shù)據(jù)定義一個視點。照明的一個或多個來源也可以被定義或選擇。還可以定義位于視點和三維空間之間的虛平面,即所謂的繪制屏幕。將繪制屏幕分成一個排列中的象素(pixel),所述排列最好對應(yīng)于用于顯示圖象的象素的數(shù)目。例如,如果要在NTSC電視或VGA計算機顯示器的屏幕上顯示圖象,則繪制屏幕最好被分成640×480個象素。然后繪制程序計算構(gòu)成繪制屏幕的每個象素的色值。每個象素的色值一般包括紅色值、綠色值和藍色值。然而,也可以使用不同的色值、例如亮度和色差。然后響應(yīng)于象素的色值顯示圖象。這例如可以通過將色值從3D圖形擴展硬件傳送到計算機的圖形適配器的視頻存儲器來完成。
采用所謂的Z緩沖的常規(guī)3D圖形繪制程序可以如下操作1.加載階段通過網(wǎng)絡(luò)從服務(wù)器或從本地文件加載圖形數(shù)據(jù)的全集。
2.幾何階段計算多邊形在繪制屏幕上的投影。這些計算的結(jié)果包括表明每個多邊形的每個頂點距視點的深度的景深值。
3.光柵化階段執(zhí)行陰影(shading)和隱藏表面去除操作。執(zhí)行光柵化操作,將投影多邊形變換成對應(yīng)于繪制屏幕的象素的對象象素,并為每個對象象素計算一組色值。因為對象是三維的,所以有不止一個多邊形投影在繪制屏幕的一給定象素上。因此,產(chǎn)生不止一個對象象素的色值和景深值,在該處,多邊形重疊在繪制屏幕上。將色值和景深值登記在具有對應(yīng)于繪制屏幕的象素的存儲單元的象素和景深緩沖器中。在這個登記過程中,當(dāng)對于一給定繪制屏幕象素已經(jīng)產(chǎn)生不止一個對象象素時,比較景深值以確定哪一個對象象素可見。只有對應(yīng)于最小景深值的色值和景深值、即可見對象象素的那些值被存儲在象素和景深緩沖器中。這個操作有效地去除了隱藏表面、即不能從視點看見的表面。
4.顯示階段在由幾何和光柵化階段處理了所有多邊形之后,輸出象素緩沖器的內(nèi)容以進行顯示。
在光柵化(rasterizing)階段,陰影操作計算每個對象象素的色值。這個步驟還計算每個象素的一組亮度系數(shù),并將象素的初始色值乘以相應(yīng)的亮度系數(shù),以獲得象素色值。該組亮度系數(shù)一般也包括紅、綠和藍亮度系數(shù)。亮度系數(shù)定義了照明效果,并取決于對象象素所處多邊形的材料特性、每個光源的顏色、位置和方向、以及視點的位置和方向。已經(jīng)存在各種用于計算亮度系數(shù)的方法。多邊形的初始顏色是定義多邊形特性的圖形數(shù)據(jù)的一部分。如上所述,多邊形的初始顏色可以定義為直接顏色或紋理。當(dāng)采用直接顏色時,將直接顏色本身用作為初始顏色。當(dāng)在多邊形上映射紋理時,從表示紋理的圖案數(shù)據(jù)計算多邊形的每個對象象素的初始顏色。
定義每個對象象素的初始顏色的紋理的圖案數(shù)據(jù)由如下過程確定1.對于繪制屏幕的每個象素坐標(X,Y),計算相聯(lián)系的紋理坐標(s,t);以及2.從位于紋理坐標(s,t)上或附近的一個或多個紋理象素的圖案數(shù)據(jù)取得或內(nèi)插出象素顏色。
在最簡單的實施方式中,采用單組紋理圖案數(shù)據(jù)作為每個對象象素的色值。每組圖案數(shù)據(jù)通常也包括紅、綠和藍圖案數(shù)據(jù)。然而,這個簡單的紋理采樣方法經(jīng)常產(chǎn)生討厭的方塊和波紋圖案。紋理濾波(filtering)技術(shù)常常用于通過在表示紋理的多個圖案數(shù)據(jù)中內(nèi)插來計算一組單個色值。例如,所謂的Multum in Parvo(MIP)圖以多分辨率塔形數(shù)據(jù)格式存儲紋理圖象。定義每個對象象素的顏色的該組色值是采用兩級內(nèi)插產(chǎn)生的。第一個內(nèi)插操作在同一級的圖案數(shù)據(jù)之間的兩個級別上執(zhí)行,即所謂的層內(nèi)內(nèi)插。執(zhí)行兩個層內(nèi)內(nèi)插操作,每個內(nèi)插操作都在同一級的圖案數(shù)據(jù)之間的兩個相鄰級別中的一個不同級別上執(zhí)行。然后,在兩個層內(nèi)內(nèi)插操作的結(jié)果之間執(zhí)行層間內(nèi)插操作。整個過程被稱為三線內(nèi)插。
常規(guī)3D圖形繪制程序需要在加載階段接收所有紋理數(shù)據(jù)。然而,不是所有紋理都產(chǎn)生在最終繪制成的圖象中可見的結(jié)果。在后面和剪輯多邊形上的紋理在光柵化階段不進行處理,并且,從加在封閉多邊形上的紋理導(dǎo)出的對象象素在最終圖象中不顯示,因為它們在隱藏表面去除操作中都被舍棄了。將紋理作為帶有單個高分辨率的位圖來提供的常規(guī)技術(shù)還延長了繪制時間。這是因為當(dāng)其上映射有紋理的多邊形遠離視點或處于相對于視點為斜角時產(chǎn)生高分辨率紋理所需的許多位圖數(shù)據(jù)可能都是多余的。在這些情況下,較低分辨率的紋理則足夠。在采用常規(guī)3D圖形繪制程序的情況下,在常規(guī)加載階段加載紋理之前確定哪些紋理和紋理分辨率是繪制圖象所必須的是不可能的,因為此時還沒有計算出幾何。其結(jié)果為,常規(guī)3D圖形繪制程序需要在加載階段加載所有紋理,并且需要以其最高分辨率加載。
多邊形的數(shù)目一般比紋理尺寸對繪制時間的影響要大得多。因此,應(yīng)用一般試圖通過減少多邊形數(shù)目并增大紋理的使用來減少提供真實自然的3D圖象所必須的計算能力。然而,在這樣做時,所產(chǎn)生的大量紋理數(shù)據(jù)會延長加載時間,特別是在網(wǎng)絡(luò)環(huán)境下。
發(fā)明概述本發(fā)明提供了一個響應(yīng)于三維圖形數(shù)據(jù)繪制圖象的繪制裝置。繪制裝置包括一個輸入路徑,繪制裝置通過該輸入路徑可以接收三維圖形數(shù)據(jù),還包括象素/景深緩沖器、基準緩沖器和繪制機。三維圖形數(shù)據(jù)包括多邊形數(shù)據(jù),另外還包括定義紋理的紋理數(shù)據(jù)。紋理數(shù)據(jù)包括紋理尺寸數(shù)據(jù)和圖案數(shù)據(jù)組。圖案數(shù)據(jù)構(gòu)成紋理數(shù)據(jù)的主要部分。象素/景深緩沖器和基準緩沖器分別包括對應(yīng)于繪制屏幕的象素的第一存儲器單元和第二存儲器單元。繪制機執(zhí)行初始光柵化操作,僅僅采用多邊形和紋理尺寸數(shù)據(jù)來為繪制屏幕的每個象素產(chǎn)生紋理標識符、表明紋理分辨率的層深值以及紋理坐標,并存儲在基準緩沖器中。繪制機還響應(yīng)每個繪制屏幕象素的存儲在基準緩沖器中的紋理標識符、層深和紋理坐標來識別繪制圖象所需的一些圖案數(shù)據(jù)。繪制機通過路徑來獲得被識別為繪制圖象所需的那些圖案數(shù)據(jù)。最后,繪制機采用通過路徑獲得的圖案數(shù)據(jù)來產(chǎn)生表示圖象的圖象數(shù)據(jù)。路徑具有明顯小于繪制機與緩沖器之間的數(shù)據(jù)傳輸率的數(shù)據(jù)傳輸率。
繪制裝置還可以包括紋理存儲器,圖案數(shù)據(jù)以塔形數(shù)據(jù)結(jié)構(gòu)存儲在其中。塔形數(shù)據(jù)結(jié)構(gòu)包括多層,每一層中存儲著一相應(yīng)組的代表具有不同分辨率的紋理的圖案數(shù)據(jù)。這些圖案數(shù)據(jù)中的一組表示具有最高分辨率的紋理。
繪制圖象所需的圖案數(shù)據(jù)可以由通過路徑加載圖案數(shù)據(jù)或從表示具有較高分辨率的紋理的一組圖案數(shù)據(jù)的圖案數(shù)據(jù)綜合圖案數(shù)據(jù)來獲得。
層深值可以是具有整數(shù)部分和分數(shù)部分的實數(shù)。當(dāng)層深值的分數(shù)部分是零時,繪制機可以在由層深值的整數(shù)部分所指示的一組圖案數(shù)據(jù)中的圖案數(shù)據(jù)中執(zhí)行第一層內(nèi)內(nèi)插,以產(chǎn)生紋理色值,從該紋理色值可以導(dǎo)出圖象數(shù)據(jù)。然而,當(dāng)層深值的分數(shù)部分不為零時,繪制機執(zhí)行第一層內(nèi)內(nèi)插,在具有比所述組高一級的分辨率的另一組中的圖案數(shù)據(jù)中執(zhí)行第二層內(nèi)內(nèi)插,并在由第一和第二層內(nèi)內(nèi)插產(chǎn)生的結(jié)果之間執(zhí)行層間內(nèi)插,以產(chǎn)生可以導(dǎo)出圖象數(shù)據(jù)的紋理色值。
本發(fā)明還提供了響應(yīng)三維圖形數(shù)據(jù)繪制圖象的方法。圖象由對應(yīng)于繪制屏幕的象素的圖象數(shù)據(jù)表示。三維圖形數(shù)據(jù)包括多邊形數(shù)據(jù),另外還包括定義紋理的紋理數(shù)據(jù)。紋理數(shù)據(jù)包括紋理尺寸數(shù)據(jù)和多組圖案數(shù)據(jù)。每組中的圖案數(shù)據(jù)表示具有不同分辨率的紋理。圖案數(shù)據(jù)構(gòu)成紋理數(shù)據(jù)的的主要部分。在該方法中,接收多邊形和紋理尺寸數(shù)據(jù)。為繪制屏幕的每個象素執(zhí)行初始光柵化操作。采用多邊形和紋理尺寸數(shù)據(jù)來執(zhí)行初始光柵化操作,產(chǎn)生并存儲紋理標識符、表明紋理分辨率的層深值以及紋理坐標。響應(yīng)為每個繪制屏幕象素存儲的紋理標識符、層深和紋理坐標執(zhí)行圖案數(shù)據(jù)識別操作。圖案數(shù)據(jù)識別操作識別繪制圖象所需的一些圖案數(shù)據(jù)。然后執(zhí)行圖案數(shù)據(jù)獲取操作。這個操作獲取由圖案數(shù)據(jù)識別操作識別為繪制圖象所需的那些圖案數(shù)據(jù)。然后執(zhí)行最后的光柵化操作。在該操作中,采用由圖案數(shù)據(jù)獲取操作獲取的圖案數(shù)據(jù)產(chǎn)生表示圖象的圖象數(shù)據(jù)。
本發(fā)明通過提供響應(yīng)3D圖形數(shù)據(jù)產(chǎn)生圖象的新的處理裝置和繪制方法,顯著減少了在圖象出現(xiàn)在屏幕上之前用戶必須等待的時間。在依據(jù)本發(fā)明的繪制裝置和方法中,直到已經(jīng)完成初始的第一光柵化操作之后,才獲取表示紋理的圖案數(shù)據(jù)。圖案數(shù)據(jù)通過加載或從塔形數(shù)據(jù)結(jié)構(gòu)的高分辨率層的圖案數(shù)據(jù)合成而獲得。在獲取圖案數(shù)據(jù)之前執(zhí)行初始光柵化操作意味著只有定義以所需分辨率繪制圖象所需的紋理的部分的圖案數(shù)據(jù)才被獲取以繪制圖象。這樣,則必須從服務(wù)器加載或合成的圖案數(shù)據(jù)的數(shù)目減少,從而等待時間也減少。
依據(jù)本發(fā)明的繪制裝置包括保存由初始繪制操作產(chǎn)生的中間結(jié)果的基準緩沖器,其中,初始繪制操作是在沒有圖案數(shù)據(jù)的情況下執(zhí)行的。這使得圖案數(shù)據(jù)的獲取及紋理象素的色值的內(nèi)插能夠被推遲。通過采用基準緩沖器的內(nèi)容,由于只加載所需的圖案數(shù)據(jù),所以本發(fā)明允許高效地獲得圖案數(shù)據(jù)。本發(fā)明還提供了顯示的兩個替換方法,“最佳分辨率”和“漸進分辨率”,這將在下面進行描述。
附圖簡要說明
圖1是依據(jù)本發(fā)明的包括繪制裝置和實施繪制方法的3D圖形繪制系統(tǒng)的結(jié)構(gòu)的方框圖。
圖2顯示了依據(jù)本發(fā)明的繪制裝置和方法中用于存儲紋理的圖案數(shù)據(jù)的多分辨率塔形數(shù)據(jù)結(jié)構(gòu)。
圖3A和3B顯示了當(dāng)象素的色值分別是直接計算出以及采用紋理色值計算出時基準緩沖器的對應(yīng)于繪制屏幕的一個象素的一個單元的數(shù)據(jù)結(jié)構(gòu)。
圖4A是顯示依據(jù)本發(fā)明的圖象繪制方法的流程圖。
圖4B是顯示依據(jù)本發(fā)明的圖象繪制方法的更加詳細的流程圖。
圖5A是表明瓦片的子程序的流程圖,其圖案數(shù)據(jù)必須通過加載或合成來獲取,以繪制圖象。
圖5B是用于確定紋理象素是否位于瓦片的邊界上、以及如果是的話用于表明必須獲取其圖案數(shù)據(jù)的附加瓦片的子程序的流程圖。
圖6是用于獲取由圖5A所示子程序表明的瓦片的圖案數(shù)據(jù)的子程序的流程圖。
圖7A是用于內(nèi)插紋理色值和以最佳分辨率顯示方式產(chǎn)生繪制屏幕的象素的最終色值的子程序的流程圖。
圖7B是用于內(nèi)插紋理色值和以漸進分辨率顯示方式產(chǎn)生繪制屏幕的象素的最終色值的子程序的流程圖。
發(fā)明的詳細說明本發(fā)明涉及一種想要用在數(shù)據(jù)傳輸率受限的環(huán)境、例如諸如因特網(wǎng)的網(wǎng)絡(luò)中的圖象繪制裝置和方法。圖1是依據(jù)本發(fā)明的繪制裝置100的方框圖。繪制裝置例如處于計算機102中。在一個實際的實施例中,繪制裝置可以形成位于計算機中的圖形卡(未顯示)的一部分?;蛘?,繪制裝置可以是插入或與計算機的圖形卡相連的硬件附件。
所示計算機102通過I/O端口104連接為網(wǎng)絡(luò)106的客戶機。I/O端口與總線108直接或間接相連,繪制裝置和計算機的其他元件也連接到該總線上。網(wǎng)絡(luò)、I/O端口和總線構(gòu)成了一個路徑,繪制裝置通過該路徑接收包括定義一個或多個紋理的紋理數(shù)據(jù)的三維圖形數(shù)據(jù)。
如圖所示,連接到總線108的是視頻輸出端口116,通過該端口將由繪制裝置100產(chǎn)生的繪制屏幕象素的最終色值傳送給監(jiān)視器150進行顯示。
還與網(wǎng)絡(luò)106相連的是服務(wù)器110,服務(wù)器110包括共同存儲3D圖形數(shù)據(jù)的存儲器112和114。存儲器112存儲用于定義3D圖形中的對象表面的拓撲結(jié)構(gòu)的多邊形數(shù)據(jù)。存儲器114存儲用于定義運用到一個或多個表面上的紋理的紋理數(shù)據(jù)。定義紋理外觀的圖案數(shù)據(jù)構(gòu)成了紋理數(shù)據(jù)的相當(dāng)大的主要部分。紋理數(shù)據(jù)還包括諸如紋理高度和寬度數(shù)據(jù)的數(shù)據(jù)。
另外或可替換地,3D圖形數(shù)據(jù)可以存儲在計算機102中。在這種情況下,等效于存儲器112和114的存儲部分位于諸如硬盤的存儲器(未顯示)中,所述存儲器位于計算機中并與總線108直接或間接相連。例如,從服務(wù)器110加載的3D圖形可以高速緩存在計算機的硬盤上。在這種情況下,硬盤和總線構(gòu)成了繪制裝置接收三維圖形數(shù)據(jù)、包括定義一個或多個紋理的紋理數(shù)據(jù)的路徑。
在繪制裝置100中,繪制機120與總線108相連。繪制機運行繪制程序122以便響應(yīng)3D圖形數(shù)據(jù)執(zhí)行繪制操作。繪制操作產(chǎn)生指定二維圖象的一組象素數(shù)據(jù)。繪制機執(zhí)行依據(jù)本發(fā)明的方法。繪制機可以用微處理器、數(shù)字信號處理器、一個或多個特定用途集成電路或通用集成電路構(gòu)成,并且可以包括使得其能執(zhí)行這里所述處理的其他元件,例如只讀和隨機存取存儲器。
繪制裝置100另外還包括象素/景深緩沖器124和基準緩沖器126。象素/景深緩沖器和基準緩沖器或者直接通過總線108或者由一些其他結(jié)構(gòu)連接到繪制機120。在繪制機和緩沖器之間的數(shù)據(jù)傳輸率遠遠大于三維圖形數(shù)據(jù)通過路徑、即從網(wǎng)絡(luò)106或從計算機的硬盤驅(qū)動器接收的速率。
象素/景深緩沖器124和基準緩沖器126最好每個都包括多字節(jié)存儲單元。每個單元最好對應(yīng)于繪制屏幕的一個象素。在由繪制機120執(zhí)行的每個繪制操作期間,象素/景深緩沖器按順序第一個用作為景深緩沖器,第二個用作為象素緩沖器。一般地,常規(guī)繪制裝置也包括景深緩沖器和象素緩沖器,但常規(guī)裝置在執(zhí)行隱藏表面去除操作時同時使用緩沖器,因此不能將一單個緩沖器用于兩個功能。在依據(jù)本發(fā)明的繪制裝置中,景深緩沖器和象素緩沖器不需要同時使用,所以兩個緩沖器的功能可以由物理存儲器的一單個部分執(zhí)行。依據(jù)本發(fā)明的繪制裝置100使用基準緩沖器126來存儲由紋理計算產(chǎn)生的中間結(jié)果,這將在下面詳細說明。
繪制裝置100還包括與總線108相連的紋理數(shù)據(jù)存儲器130。紋理數(shù)據(jù)存儲器被分成多頁,在132顯示了該頁的一個例子。在每頁中存儲一個紋理的紋理數(shù)據(jù)。紋理數(shù)據(jù)存儲器的每頁被分成多個區(qū),在這些區(qū)中存儲著表示紋理的紋理數(shù)據(jù)的子集。在圖1所示的例子中,頁132包括最大層深存儲器133、塔形圖案數(shù)據(jù)存貯器134、瓦片(tile)加載列表136、瓦片間距陣列138和瓦片基數(shù)陣列140。
將表示紋理的圖案數(shù)據(jù)以多分辨率塔形數(shù)據(jù)結(jié)構(gòu)存儲在塔形圖案數(shù)據(jù)存儲器134中,該多分辨率塔形數(shù)據(jù)結(jié)構(gòu)將在下面詳細描述。瓦片加載列表136包括紋理被分成的每個瓦片的一個入口,這將在下面詳細描述。該入口表明瓦片的圖案數(shù)據(jù)的獲取狀態(tài),即瓦片的圖案數(shù)據(jù)是否已經(jīng)被獲得,以及這種圖案數(shù)據(jù)是否需要獲得。瓦片間距陣列138和瓦片基數(shù)陣列140每個都包括塔形數(shù)據(jù)結(jié)構(gòu)的每層的一個入口。瓦片間距陣列的入口表明在該層的每行中的瓦片數(shù)目。瓦片基數(shù)陣列中的入口表明該層的左上角的瓦片號。瓦片基數(shù)陣列可以包括一個附加入口,在該入口中存儲著瓦片的總數(shù)。下面將詳細描述存儲在紋理存儲器的每頁中的紋理數(shù)據(jù)。
圖2顯示了存儲表示每個紋理的圖案數(shù)據(jù)的多分辨率塔形數(shù)據(jù)結(jié)構(gòu)200的結(jié)構(gòu)。多分辨率塔形數(shù)據(jù)結(jié)構(gòu)基于在商標FLASHPIX下出售的常規(guī)的二維圖形系統(tǒng)。這個二維圖形系統(tǒng)采用多分辨率塔形數(shù)據(jù)結(jié)構(gòu)來存儲表示二維圖象、例如照片等的數(shù)據(jù)。在依據(jù)本發(fā)明的繪制裝置和方法中,每個紋理的圖案數(shù)據(jù)存儲在塔形數(shù)據(jù)結(jié)構(gòu)中,在該塔形數(shù)據(jù)結(jié)構(gòu)中,將多組圖案數(shù)據(jù)排列在多層中,每組圖案數(shù)據(jù)表示具有不同分辨率的紋理。將這些層從頂層向下編號,頂層為層0。一層在塔形結(jié)構(gòu)中的位置由該層的層深表示。存儲最低分辨率圖案數(shù)據(jù)的頂層的層深為0。在圖2所示例子中,存儲最高分辨率圖案數(shù)據(jù)的層的層深是4。然而,塔形數(shù)據(jù)結(jié)構(gòu)可以包括比在該例子中所示數(shù)目更多或更少的層數(shù)。
塔形數(shù)據(jù)結(jié)構(gòu)200的每層中的圖案數(shù)據(jù)以在下一層中的圖案數(shù)據(jù)表示紋理的分辨率的一半的分辨率來表示紋理,以上一層中的圖案數(shù)據(jù)表示紋理的分辨率的兩倍的分辨率來表示紋理。
以其最高分辨率表示紋理的圖案數(shù)據(jù)構(gòu)成了塔形數(shù)據(jù)結(jié)構(gòu)200的底層202。通常,最高分辨率與紋理的初始分辨率一樣。然而,如果初始分辨率高于應(yīng)用所需的最大分辨率,則最高分辨率可以小于初始分辨率。將底層中四個相鄰象素的圖案數(shù)據(jù)結(jié)合起來,以產(chǎn)生底層的上一層203中的一個象素的圖案數(shù)據(jù)。因此,層203中的圖案數(shù)據(jù)表示具有線性分辨率的紋理,該線性分辨率在每個方向上都為底層的圖案數(shù)據(jù)的分辨率的一半。層203中圖案數(shù)據(jù)的個數(shù)是底層202中圖案數(shù)據(jù)的個數(shù)的四分之一。執(zhí)行上述結(jié)合過程以便從下一層中的圖案數(shù)據(jù)產(chǎn)生每個剩余層204-206中的圖案數(shù)據(jù)。
在塔形數(shù)據(jù)結(jié)構(gòu)200的頂層206中,由a個水平象素和b個垂直象素的陣列的圖案數(shù)據(jù)表示紋理。在最佳實施例中,a=b=64。應(yīng)該注意,塔形數(shù)據(jù)結(jié)構(gòu)200與常規(guī)的塔形數(shù)據(jù)結(jié)構(gòu)、例如MIP數(shù)據(jù)結(jié)構(gòu)不同。在塔形數(shù)據(jù)結(jié)構(gòu)200中,一個瓦片的圖案數(shù)據(jù)存儲在頂層中。在常規(guī)塔形數(shù)據(jù)結(jié)構(gòu)中,一個象素的圖案數(shù)據(jù)存儲在頂層中。
可以將塔形數(shù)據(jù)結(jié)構(gòu)200的低于頂層206的每層分成多個瓦片,每個瓦片包括a×b象素的陣列。在210顯示了一個瓦片的例子。瓦片是獲得圖案數(shù)據(jù)的單位。將圖案數(shù)據(jù)以瓦片為單位從服務(wù)器110加載,并且,如上所述,另外或可選地可從位于客戶機102的存儲器(未顯示)傳輸。將塔形數(shù)據(jù)結(jié)構(gòu)200的每層分成4D個瓦片,其中D是該層的層深,頂層206的層深為0。
每層中的圖案數(shù)據(jù)一般構(gòu)成表示紋理的圖象映射。然而,當(dāng)圖案數(shù)據(jù)通過網(wǎng)絡(luò)106傳送到繪制裝置時,例如,可以壓縮圖象映射數(shù)據(jù),以減少傳輸時間。例如,可以采用JPEG壓縮來壓縮圖象映射數(shù)據(jù),以產(chǎn)生用于傳輸?shù)膱D案數(shù)據(jù)。然而,壓縮的圖案數(shù)據(jù)在存儲在塔形數(shù)據(jù)結(jié)構(gòu)之前被擴展成位圖的形式。
將圖案數(shù)據(jù)存儲在塔形數(shù)據(jù)結(jié)構(gòu)200的每層202-206中。層202-206中的每層具有層深D,其中D為整數(shù),即0,1,2,...,n。然而,當(dāng)繪制機120計算要運用到一給定對象象素上的紋理的最優(yōu)分辨率時(這將在后面詳細描述),由該計算產(chǎn)生的層深是一個實數(shù),即,層深除了整數(shù)部分之外還可以具有分數(shù)部分。這樣的層深與塔形數(shù)據(jù)結(jié)構(gòu)的物理層不一致。在這種情況下,繪制機120為具有非整數(shù)層深的層計算圖案數(shù)據(jù)。這種圖案數(shù)據(jù)是通過在存儲在具有等于層深D的整數(shù)部分的整數(shù)層深DL的層中存儲的圖案數(shù)據(jù)以及存儲在具有整數(shù)層深DG=DL+1的層中存儲的圖案數(shù)據(jù)中進行內(nèi)插來計算的。例如,繪制機通過在層深為2和3的層的圖案數(shù)據(jù)中內(nèi)插,為層深為2.3的層計算圖案數(shù)據(jù)。
如上所述,繪制緩沖器126存儲為繪制屏幕的每個象素執(zhí)行的初始光柵化操作的結(jié)果。該結(jié)果在以后執(zhí)行最終光柵化操作時使用。基準緩沖器可以在存儲器、例如隨機存取存儲器的一部分中實現(xiàn)。將存儲器分成多個單元,每個單元對應(yīng)于繪制屏幕的一個象素。圖3A和3B顯示了在基準緩沖器126的單元中使用的用于存儲初始光柵化操作的結(jié)果的兩個任選數(shù)據(jù)結(jié)構(gòu)的例子。存儲在單元中的初始光柵化操作的結(jié)果可以是直接顏色數(shù)據(jù)或紋理數(shù)據(jù)。存儲在單元中的數(shù)據(jù)類型可以由存儲在單元的第一字段301中的位的狀態(tài)表示。圖3A顯示了當(dāng)初始光柵化操作產(chǎn)生直接顏色數(shù)據(jù)時單元的數(shù)據(jù)結(jié)構(gòu)的例子。圖3B顯示了當(dāng)初始光柵化操作產(chǎn)生紋理坐標和亮度系數(shù)時單元的數(shù)據(jù)結(jié)構(gòu)的例子。
在初始光柵化操作中,當(dāng)從位于未運用紋理的多邊形中的對象象素導(dǎo)出繪制屏幕象素時,如上所述,通過將多邊形的直接顏色乘以其亮度系數(shù)來獲得繪制屏幕象素的最終色值。在這種情況下,存儲在第一字段301中的0表明初始光柵化操作產(chǎn)生直接顏色數(shù)據(jù)。乘法產(chǎn)生的最終色值一般包括紅色值、綠色值和藍色值。紅、綠和藍色值采用圖3A所示的數(shù)據(jù)結(jié)構(gòu)分別存儲在象素單元的字段302的R、G、B區(qū)段中。分配給單元300的存儲器的剩余部分306為保留的,以便當(dāng)從位于運用了紋理的多邊形中的對象象素導(dǎo)出繪制屏幕象素時可以使用相同尺寸的單元,數(shù)據(jù)結(jié)構(gòu)是如圖3B所示的結(jié)構(gòu)。
當(dāng)從位于運用了紋理的多邊形中的對象象素導(dǎo)出繪制屏幕象素時,將1存儲在單元300的第一字段301中,如圖3B所示。存儲在單元的余下字段中的數(shù)據(jù)如下所示字段310存儲表明圖1中所示紋理存儲器301的頁的指針或索引,其中存儲了運用到象素上的紋理的紋理數(shù)據(jù)。字段312存儲以圖2所示塔形數(shù)據(jù)結(jié)構(gòu)的底(最高分辨率)層202的象素表示的紋理坐標(S,T)。通過將多邊形的投影矩陣和紋理映射矩陣或函數(shù)(s,t)運用到對象象素的坐標(X,Y)上來計算紋理坐標S=s(X,Y)T=t(X,Y)字段314存儲定義如圖2所示塔形數(shù)據(jù)結(jié)構(gòu)的層的層深D,從該塔形數(shù)據(jù)結(jié)構(gòu)將取得用于計算繪制屏幕象素的最終色值的圖案數(shù)據(jù)。層深D采用下列方程式進行計算D=Dmax-log2{max[(∂S∂X)2+(∂T∂X)2·(∂S∂Y)2+(∂T∂Y)2]}]]>其中,Dmax是圖2所示塔形數(shù)據(jù)結(jié)構(gòu)200的底層202的層深。
最后,字段316存儲象素的亮度系數(shù)。在這個例子中,將紅、綠和藍亮度系數(shù)分別存儲在字段的區(qū)段IR、IB和IB中。
在常規(guī)3D圖形繪制中,紋理坐標(S,T)和層深D是以實數(shù)計算的,然后采用計算出的參數(shù)立即執(zhí)行層內(nèi)和層間內(nèi)插,以產(chǎn)生每個繪制屏幕象素的最終色值。然而,在依據(jù)本發(fā)明的繪制裝置和方法中,紋理坐標(S,T)和層深D是在初始光柵化操作期間計算出來的。初始光柵化操作是在加載任何圖案數(shù)據(jù)之前執(zhí)行的。將初始光柵化操作的結(jié)果存儲在基準緩沖器中,以供在最終光柵化操作期間計算最終色值時使用。這只在已經(jīng)獲得所需的圖案數(shù)據(jù)之后才執(zhí)行。
下面將參考圖1、2、3、4A和4B說明依據(jù)本發(fā)明的方法和依據(jù)本發(fā)明的繪制裝置的操作。應(yīng)該指出,最初只有一小部分紋理數(shù)據(jù)從服務(wù)器進行加載。對構(gòu)成紋理數(shù)據(jù)的絕大多數(shù)的圖案數(shù)據(jù)的獲取一直延遲到已經(jīng)完成初始光柵化操作之后。下列說明針對的是一個例子,其中,3D圖形數(shù)據(jù)存儲在服務(wù)器110中,并通過網(wǎng)絡(luò)106加載。當(dāng)3D圖形數(shù)據(jù)高速緩存在計算機102中時也執(zhí)行類似的操作。
首先,參考圖4A所示的流程圖描述所述方法和繪制裝置的操作的概況。為了簡化下列說明,只描述加到要運用紋理的繪制屏幕象素上的處理。處理從步驟400開始。
在步驟402,執(zhí)行第一加載操作。在這個步驟中,從服務(wù)器加載多邊形數(shù)據(jù)和每個紋理的寬度和高度值。每個紋理的寬度和高度值構(gòu)成了紋理的紋理數(shù)據(jù)的一小部分。此外,多邊形數(shù)據(jù)的數(shù)目相對較低。因此,執(zhí)行這個步驟只需要很短的時間。
在步驟404,執(zhí)行幾何計算。
在步驟406,執(zhí)行初始光柵化操作。初始光柵化操作與常規(guī)光柵化操作的不同之處在于,它在沒有紋理的圖案數(shù)據(jù)的情況下執(zhí)行。初始光柵化操作包括采用象素/景深緩沖器124作為景深緩沖器的隱藏表面去除操作。隱藏表面去除操作識別將被運用到繪制屏幕的每個象素上的紋理。表明存儲所識別出的紋理的紋理數(shù)據(jù)的紋理存儲器130的頁的指針存儲在基準緩沖器126的象素單元中。在這個步驟中,還為繪制屏幕的每個象素計算由隱藏表面去除操作識別出的紋理的層深D和紋理坐標(S,T)以及繪制屏幕象素的亮度系數(shù)。層深、紋理坐標和亮度系數(shù)也存儲在基準緩沖器的象素單元中。
在步驟408,采用存儲在基準緩沖器126中的紋理坐標和層深來識別塔形數(shù)據(jù)結(jié)構(gòu)的必須獲取其圖案數(shù)據(jù)以繪制圖象的瓦片。
在步驟410,執(zhí)行第二加載操作。在這個步驟中,只有那些在步驟408識別的瓦片的圖案數(shù)據(jù)被獲得。圖案數(shù)據(jù)或者通過從服務(wù)器加載來獲得,或者通過合成來自下一層、即下一個較高分辨率層的圖案數(shù)據(jù)來獲得。通常,獲取只占構(gòu)成一層的瓦片的一部分的圖案數(shù)據(jù)。此外,如果已經(jīng)獲得下一較高分辨率層的所需圖案數(shù)據(jù),則因為較低分辨率層的圖案數(shù)據(jù)可以合成出來,所以較低分辨率層的通過加載獲得其圖案數(shù)據(jù)的瓦片的部分將小于較高分辨率層的通過加載獲得其圖案數(shù)據(jù)的瓦片的部分。由于通常下載少于所有圖案數(shù)據(jù)的圖案數(shù)據(jù),所以這個步驟執(zhí)行起來比常規(guī)加載階段要快得多。
在步驟412和414,執(zhí)行最終光柵化操作。在步驟412,通過從在步驟410獲得的紋理瓦片的圖案數(shù)據(jù)進行內(nèi)插,為繪制屏幕的每個象素計算一組紋理色值。
在步驟412,將每個象素的紋理色值乘以從基準緩沖器126讀出的象素的亮度系數(shù),并將所得的象素的最終色值存儲在象素/景深緩沖器124中。亮度系數(shù)是在初始光柵化操作期間計算出來的。
在步驟414,將繪制屏幕的象素的最終色值變換成一個適于在監(jiān)視器150上顯示的信號。
在步驟416,執(zhí)行結(jié)束。
下面將參考圖1、2、3和4B更詳細地說明依據(jù)本發(fā)明的方法和繪制裝置的操作。執(zhí)行從步驟450開始。
在步驟451和452,執(zhí)行第一加載操作。在該操作中,不加載圖案數(shù)據(jù)。
在步驟451,從服務(wù)器110中的存儲器112加載多邊形網(wǎng)格數(shù)據(jù)。多邊形網(wǎng)格數(shù)據(jù)包括指定運用到多邊形表面的紋理的數(shù)據(jù)。
在步驟452,從服務(wù)器110的存儲器114加載由多邊形網(wǎng)格數(shù)據(jù)指定的每個紋理的寬度和高度。紋理的寬度和高度值構(gòu)成了上述紋理數(shù)據(jù)的一小部分。此時不加載構(gòu)成紋理數(shù)據(jù)的大多數(shù)的圖案數(shù)據(jù)。在該步驟中,還響應(yīng)于由多邊形網(wǎng)格數(shù)據(jù)指定的每個紋理的寬度和高度值執(zhí)行紋理初始化操作。在這個初始化操作中,用寬度和高度值來計算圖2所示多分辨率塔形數(shù)據(jù)結(jié)構(gòu)在最終獲得圖案數(shù)據(jù)時將用來存儲紋理的圖案數(shù)據(jù)的層數(shù)(Dmax+1)。還要計算出或從查找表讀出的是塔形數(shù)據(jù)結(jié)構(gòu)的每層的行中的瓦片數(shù)、以及每層的左上角瓦片的瓦片號。
Dmax的值存儲在紋理存儲器130的紋理頁132的133中。初始化操作還采用由上述層計算產(chǎn)生的結(jié)果和紋理高度和寬度值來為紋理存儲器的紋理頁中的每個紋理設(shè)置塔形數(shù)據(jù)結(jié)構(gòu)134、瓦片加載列表136、瓦片間距陣列138和瓦片基數(shù)陣列140。
瓦片加載列表136包括塔形數(shù)據(jù)結(jié)構(gòu)134中的每個瓦片的入口。入口存儲表示瓦片的獲取狀態(tài)的兩位代碼。瓦片的加載狀態(tài)具有三個狀態(tài),這三個狀態(tài)在這個公開文本中由字母N、L和E表示。實際繪制裝置中的加載狀態(tài)由上述的兩位代碼來表示。紋理初始化操作將每個瓦片的入口設(shè)置為“N”,“N”表明該瓦片的圖案數(shù)據(jù)不在該紋理的塔形數(shù)據(jù)結(jié)構(gòu)中。后來,識別必須獲取其圖案數(shù)據(jù)的瓦片的操作將這樣的瓦片的瓦片加載列表中的入口設(shè)置為“L”,“L”表明在上述的第二加載操作中必須獲取該瓦片的圖案數(shù)據(jù)。第二加載操作將這些已經(jīng)獲得了圖案數(shù)據(jù)并存儲在塔形數(shù)據(jù)結(jié)構(gòu)中的瓦片的瓦片加載列表中的入口設(shè)置為“E”,“E”表明該瓦片的圖案數(shù)據(jù)存在于塔形數(shù)據(jù)結(jié)構(gòu)中,并可以用于繪制圖象。
瓦片間距陣列138和瓦片基數(shù)陣列140中的每一個都包括塔形數(shù)據(jù)結(jié)構(gòu)134的每一層的入口。瓦片間距陣列138中的入口存儲該層的瓦片間距。瓦片間距是該層的行中的瓦片數(shù)。瓦片基數(shù)陣列140中的入口存儲該層的瓦片基數(shù)(base)。瓦片基數(shù)是該層的左上角瓦片的瓦片號。
當(dāng)紋理由在一個正方形中排列的紋理象素的圖案數(shù)據(jù)定義時,其中該正方形的大小以象素表示是2的冪,例如512×512個象素,從頂(最低分辨率)層206開始的塔形數(shù)據(jù)結(jié)構(gòu)200的層中的瓦片間距的值為1,4,16,...,4D,其中D是該層的層深,頂層的層深為0。瓦片基數(shù)的相應(yīng)值為0,1,5,21,...,
,其中k是一個指數(shù)。
當(dāng)紋理由在其大小不是2的冪的陣列中排列的紋理象素的圖案數(shù)據(jù)定義時,需要更復(fù)雜的計算來產(chǎn)生瓦片間距和瓦片基數(shù)(base)。這種計算在需要時在步驟452中執(zhí)行。注意,在步驟452完成時,對于紋理還未獲得任何圖案數(shù)據(jù)。
在步驟453,執(zhí)行常規(guī)幾何階段操作。在這個步驟中,計算多邊形在繪制屏幕上的投影。
在步驟454,執(zhí)行初始光柵化操作。在這個步驟中,將步驟453計算出的多邊形在繪制屏幕上的投影變換成對象象素,并為每個對象象素執(zhí)行景深計算,以供隱藏表面去除中使用。景深計算最好采用象素/景深緩沖器124來登記對象象素的景深值。或者,也可以使用與象素緩沖器無關(guān)的景深緩沖器。當(dāng)對象象素重疊時,只有具有最小景深值的對象象素被登記在緩沖器中,從而執(zhí)行了隱藏表面去除。
景深計算定義了對應(yīng)于繪制屏幕的每個象素的對象象素。對于對應(yīng)于位于要運用紋理的多邊形中的對象象素的繪制屏幕象素,將基準緩沖器126中的象素單元300的字段301設(shè)置為1,將存儲著紋理的紋理數(shù)據(jù)的紋理存儲器130的頁地址輸入進單元的字段310中。對于對應(yīng)于位于其顏色由直接顏色計算確定的多邊形中的對象象素的繪制屏幕象素,將基準緩沖器126中的象素單元300的字段301設(shè)置為0。
對于對應(yīng)于位于不運用紋理的多邊形中的每個對象象素的繪制屏幕象素,如基準緩沖器126中繪制屏幕象素單元300的字段301中的0所示,執(zhí)行常規(guī)陰影計算。陰影計算產(chǎn)生該象素的一組色值。將該組色值中的紅、綠和藍色值分別存儲在基準緩沖器中象素單元的字段302的R、G和B區(qū)段中。
對于對應(yīng)于位于要運用紋理的多邊形中的每個對象象素的繪制屏幕象素,如基準緩沖器126中繪制屏幕象素單元300的字段301中的1所示,執(zhí)行部分陰影計算。部分陰影計算產(chǎn)生該象素的紋理坐標(S,T)、層深D和亮度系數(shù)等值。將紋理坐標存儲在基準緩沖器中象素單元的字段312中,將層深存儲在字段314中,將紅、綠和藍亮度系數(shù)分別存儲在字段316的區(qū)段IR、IG和IB中。
本發(fā)明提供了兩種顯示方式,即最佳分辨率顯示方式和漸進分辨率顯示方式。最佳分辨率顯示方式使圖案數(shù)據(jù)的全部加載時間最少。漸進分辨率顯示方式比最佳分辨率顯示方式更快地顯示圖象。然而,在漸進分辨率顯示方式中,首先以低分辨率顯示紋理,接著以遞增的分辨率進行顯示,直到以最優(yōu)分辨率顯示每個紋理。顯示方式可以由用戶(未顯示)選擇或由3D圖形程序定義。
在步驟455,執(zhí)行測試以確定是否選擇了最佳分辨率顯示方式。如果測試結(jié)果是YES,則執(zhí)行進行到步驟461,開始最佳分辨率顯示方式的處理。如果測試結(jié)果是NO,則執(zhí)行進行到步驟471,開始漸進分辨率顯示方式的處理。下面將說明最佳分辨率顯示方式的處理,隨后說明漸進分辨率顯示方式的處理。
在步驟461,為繪制屏幕的每個象素執(zhí)行下面將參考圖5A和5B詳細說明的例程,其中繪制屏幕的每個象素在基準緩沖器126中象素單元300的字段301中具有值1。在這個字段中的1表明對應(yīng)于該繪制屏幕象素的對象象素位于一個要運用紋理的多邊形內(nèi)。該例程為每個紋理識別紋理的塔形數(shù)據(jù)結(jié)構(gòu)134的在第二加載操作中必須獲得其圖案數(shù)據(jù)以允許繪制圖象的瓦片。當(dāng)完成步驟461的執(zhí)行時,識別出每個紋理的塔形數(shù)據(jù)結(jié)構(gòu)的其圖案數(shù)據(jù)必須被獲得的所有瓦片,并將紋理的瓦片加載列表136中的這些瓦片的入口都設(shè)置成“L”。
在步驟462,通過為在紋理存儲器130中存在一頁132的每個紋理執(zhí)行下面將參考圖6詳細說明的例程來執(zhí)行第二加載操作。該例程掃描存儲在紋理數(shù)據(jù)存儲器130的紋理頁132中的瓦片加載列表136,并獲得其瓦片加載列表入口被設(shè)置為“L”的瓦片的圖案數(shù)據(jù)。如上所述,每個瓦片的圖案數(shù)據(jù)可以通過加載或通過從下一個較高分辨率層、即塔形數(shù)據(jù)結(jié)構(gòu)中的下面一層中的圖案數(shù)據(jù)進行合成來獲得。當(dāng)完成步驟462的執(zhí)行時,繪制圖象所需的全部圖案數(shù)據(jù)存儲在紋理存儲器的相應(yīng)頁中的塔形數(shù)據(jù)結(jié)構(gòu)中,并將相應(yīng)瓦片加載列表中的這些瓦片的入口都設(shè)置為“E”。
應(yīng)該指出,在完成步驟462之后,瓦片加載列表中的相當(dāng)多的入口可能仍保持設(shè)置為“N”。這種入口表明相應(yīng)瓦片的圖案數(shù)據(jù)還未獲得,因為不需要這種圖案數(shù)據(jù)來繪制圖象。這允許步驟462比常規(guī)加載階段更快地執(zhí)行。
在步驟463,通過為繪制屏幕的每個在基準緩沖器126的象素單元300的字段301中有1的象素執(zhí)行下面將參考圖7A詳細說明的例程來執(zhí)行最終繪制操作。該例程執(zhí)行三線性內(nèi)插來完成最初在步驟454執(zhí)行的部分陰影操作。該內(nèi)插從在步驟462獲得的圖案數(shù)據(jù)為象素計算一組紋理色值。三線性內(nèi)插是采用位于塔形數(shù)據(jù)結(jié)構(gòu)的兩層中的圖案數(shù)據(jù)來執(zhí)行的。這兩層將基準緩沖器126的象素單元300的字段314中存儲的實數(shù)層深歸在一起。該例程然后將紋理色值乘以在步驟454存儲在基準緩沖器的繪制屏幕象素單元的字段316中的相應(yīng)亮度系數(shù),以產(chǎn)生象素的最終色值。將最終色值存儲在象素緩沖器的象素存儲單元中。在最佳實施例中,象素/景深緩沖器124用作為象素緩沖器?;蛘撸梢允褂靡粋€與景深緩沖器無關(guān)的象素緩沖器。
在步驟464,對于在基準緩沖器126中象素單元300的字段301中具有0的繪制屏幕的每個象素,將存儲在基準緩沖器的象素單元的字段302中的最終色值復(fù)制到象素緩沖器中的象素存儲單元中。
最后,在步驟465,將存儲在象素緩沖器124中的最終色值直接或間接輸出到監(jiān)視器150中。監(jiān)視器響應(yīng)從象素緩沖器接收的最終色值顯示所繪制的圖象。
執(zhí)行然后進行到步驟481,執(zhí)行一個測試以確定用戶(未顯示)是否已經(jīng)鍵入了一個輸入。例如,用戶輸入可以鍵入一個改變視點的輸入。這要求執(zhí)行一個新的繪制操作。如果測試結(jié)果是NO,則執(zhí)行返回步驟481。如果測試結(jié)果是YES,則執(zhí)行進行到步驟482,改變被用戶輸入影響的參數(shù)。執(zhí)行然后返回到步驟453,執(zhí)行一個新的繪制操作。在新繪制操作期間,可能需要獲得在先前未獲得其圖案數(shù)據(jù)的瓦片的圖案數(shù)據(jù),但在剛剛描述的繪制操作中獲得的很多圖案數(shù)據(jù)通常都可以再使用。
下面將參考圖4B說明在漸進分辨率顯示方式中執(zhí)行的過程。在步驟471,從服務(wù)器110加載由在步驟451中加載的多邊形數(shù)據(jù)指定的所有紋理的頂部瓦片的圖案數(shù)據(jù)。每個紋理的頂部瓦片的圖案數(shù)據(jù)存儲在紋理存儲器130的紋理頁132中的塔形數(shù)據(jù)結(jié)構(gòu)134中的適當(dāng)位置。頂部瓦片的圖案數(shù)據(jù)表示具有最低分辨率的相應(yīng)紋理。然后,該處理執(zhí)行一個分辨率提高循環(huán),在該循環(huán)中,最初以低分辨率紋理顯示圖象,然后,隨著獲得更高分辨率瓦片的圖案數(shù)據(jù),以漸進的更高分辨率紋理顯示圖象。分辨率提高循環(huán)由步驟472-477組成。
在步驟472中,為在基準緩沖器126的象素單元300的字段301中具有1的繪制屏幕的每個象素執(zhí)行下面將參考圖7B詳細說明的例程。該例程采用雙線性和三線性內(nèi)插,以便為紋理產(chǎn)生紋理色值。將紋理色值乘以存儲在基準緩沖器126中的亮度系數(shù),并將所得的繪制屏幕象素的最終色值存儲在象素/景深緩沖器124中。象素/景深緩沖器在這個操作中用作為象素緩沖器?;蛘?,可以采用一個與景深緩沖器無關(guān)的象素緩沖器。
在循環(huán)的較早迭代中,計算出的大多數(shù)紋理色值是具有小于最佳的分辨率的中間值。然而,較早迭代可以計算一些具有最佳分辨率的紋理色值。隨著迭代次數(shù)的增加,以最佳分辨率計算出紋理色值的繪制屏幕象素的數(shù)目也增加。隨著紋理色值的分辨率的增大,在圖象中顯示紋理的分辨率也增大。
下面將要參考圖7B描述的處理還將某些瓦片的瓦片加載列表入口設(shè)置為“L”。這種入口表明,當(dāng)在例程中的后面執(zhí)行步驟477時,必須獲得其圖案數(shù)據(jù)的瓦片。獲得這些圖案數(shù)據(jù)增大了在循環(huán)的下一次迭代中執(zhí)行步驟472時所產(chǎn)生的紋理色值的分辨率。
在步驟473,對于在象素的基準緩沖器單元300的字段301中具有0的繪制屏幕的每個象素,將存儲在象素的基準緩沖器單元的字段302中的最終色值復(fù)制到象素緩沖器124中的象素位置。
在步驟474,將象素緩沖器124中存儲的繪制屏幕的象素的最終色值直接或間接輸出到監(jiān)視器150。監(jiān)視器響應(yīng)該最終色值而顯示一個圖象。執(zhí)行然后通過步驟475進行到步驟476。下面將描述步驟475。
在步驟476,在存儲在紋理存儲器130的頁132中的瓦片加載列表136上執(zhí)行測試,以確定在執(zhí)行步驟472時瓦片加載列表中的任何入口是否被設(shè)置到“L”。如果結(jié)果為NO,表明已經(jīng)獲得以最佳分辨率繪制圖象所需的所有圖案數(shù)據(jù),如上所述,處理進行到步驟481。如果結(jié)果為YES,則執(zhí)行進行到步驟477。
在步驟477,通過為每個在紋理存儲器130中存在一頁132的紋理執(zhí)行下面將參考圖6詳細說明的例程來執(zhí)行第二加載操作。該例程掃描存儲在紋理數(shù)據(jù)存儲器130的紋理頁132中的瓦片加載列表136,并獲得其瓦片加載列表入口被設(shè)置為“L”的瓦片的圖案數(shù)據(jù)。如上所述,可以通過加載或通過從下一個較高分辨率層、即在塔形數(shù)據(jù)結(jié)構(gòu)中下一層的圖案數(shù)據(jù)進行合成來獲得每個瓦片的圖案數(shù)據(jù)。當(dāng)步驟477的執(zhí)行結(jié)束時,將已經(jīng)獲得其圖案數(shù)據(jù)的瓦片的瓦片加載列表中的入口設(shè)置為“E”。執(zhí)行然后進行到步驟472。
每次執(zhí)行步驟477時,獲得具有大于先前獲得的圖案數(shù)據(jù)的分辨率的圖案數(shù)據(jù)。這使得在下一次執(zhí)行步驟472時產(chǎn)生更精細晶粒、更高分辨率圖象的最終色值。重復(fù)由步驟472-477組成的循環(huán),直到已經(jīng)獲得產(chǎn)生與由最佳分辨率顯示方式提供的相同的圖象所需的瓦片的圖案數(shù)據(jù)。當(dāng)已經(jīng)獲得提供這樣一個圖象的瓦片的圖案數(shù)據(jù)時,在步驟476執(zhí)行的測試中獲得NO結(jié)果。
步驟472到477組成的循環(huán)包括圖案數(shù)據(jù)獲取步驟477,這可能會花很長的時間來執(zhí)行,特別是在加載較高分辨率圖案數(shù)據(jù)時。因此,在循環(huán)中包括步驟475。這個步驟允許用戶中斷分辨率提高循環(huán),以輸入新的參數(shù)。新參數(shù)例如可以是視點的變換。在步驟475,執(zhí)行一個測試,以確定是否已經(jīng)接收到用戶輸入。如果結(jié)果是NO,則表明沒有接收到用戶輸入,執(zhí)行進行到步驟476,分辨率提高循環(huán)的下一步驟。如果結(jié)果是YES,則分辨率提高循環(huán)停止執(zhí)行,執(zhí)行進行到步驟482,在這里接收新的用戶參數(shù)。執(zhí)行然后返回到步驟453,在這里響應(yīng)新的用戶輸入重復(fù)繪制過程。
圖5A顯示了在步驟461執(zhí)行的例程的細節(jié),該例程識別塔形數(shù)據(jù)結(jié)構(gòu)200的那些必須獲得其圖案數(shù)據(jù)以使得圖象能以最佳分辨率顯示方式繪制的瓦片。為繪制屏幕的每個象素執(zhí)行圖5A所示例程,但以測試象素的基準緩沖器單元300的字段301的內(nèi)容開始。如果該字段包含0,則表明在步驟454計算了象素的最終色值,該例程的剩余步驟則不執(zhí)行。因此,實際上,該例程只在那些從位于要運用紋理的多邊形中的對象象素導(dǎo)出的象素上完全執(zhí)行。
執(zhí)行開始于步驟500。在步驟502,執(zhí)行一個測試,以確定在象素的基準緩沖器單元300的字段301中是否存儲著1。字段301中的1表明繪制屏幕象素對應(yīng)于一個位于要運用紋理的多邊形中的對象象素。當(dāng)測試結(jié)果為NO時,執(zhí)行進行到步驟542,在這里遞增象素地址,從而可以處理下一個繪制屏幕象素。當(dāng)測試結(jié)果為YES時,執(zhí)行進行到步驟504。
在步驟504,從基準緩沖器126中的繪制屏幕坐標單元300的字段312和314讀取紋理坐標(S,T)和景深D的值。所讀取的所有數(shù)都是實數(shù),可以表示為浮點數(shù)或定點數(shù)。
在步驟506,執(zhí)行一個測試,以確定在步驟504讀取的D值是否比紋理的Dmax的值大。Dmax的值從由存儲在單元300的字段310中的地址所表明的紋理存儲器130的頁132的區(qū)段133讀取。大于Dmax的D值表明圖案數(shù)據(jù)的最大分辨率不足以提供繪制圖象中所需的紋理分辨率。在這種情況下,將D設(shè)置為最大可用分辨率,即Dmax。如果測試結(jié)果是YES,則執(zhí)行進行到步驟508,在這里將D設(shè)置為Dmax,然后進行到步驟510。如果測試結(jié)果是NO,則過程直接進行到步驟510。
在步驟510,將在步驟504讀取的層深D分成其整數(shù)部分DL和其分數(shù)部分Dr。另外,計算比例因子的值SF=Dmax-DL。
在步驟512,用2SF除以層Dmax中的紋理坐標(S,T),以獲得層DL中的紋理坐標(S,T)L。
在步驟514,分別從紋理存儲器130的紋理頁132的瓦片間距陣列138和瓦片基數(shù)陣列140讀取層DF的瓦片基數(shù)和瓦片間距的值,并分配給變量WL和BL。紋理存儲器中的紋理頁由存儲在基準緩沖器126中的象素單元300的字段310中的地址指示。
在步驟516,將紋理坐標(S,T)L分成整數(shù)部分(Si,Ti)L和分數(shù)部分(Sf,Tf)L。
在步驟518,分別用TWL和THL除以層DL中的紋理坐標的整數(shù)部分(Si,Ti)L,以產(chǎn)生商(Sr,Tr)L。在該步驟中,TWL和THL分別是層DL中的瓦片的象素的寬度和高度。還計算除法的余數(shù)(Sb,Tb)L,以便用在在步驟524中執(zhí)行的子程序中,并且用于計算在步驟520中識別的瓦片的應(yīng)用的局部坐標。
在步驟520,從該層的瓦片基數(shù)BL、瓦片間距WL以及在步驟518計算出的商計算繪制圖象所需的圖案數(shù)據(jù)所屬于的層DL中的瓦片的瓦片號ND1。通過對瓦片基數(shù)BL、商(Sr)L以及商(Tr)L與瓦片間距WL的乘積進行求和來得到瓦片號ND1,即,ND1=BL+((Tr)L×WL)+(Sr)L。
在步驟522,將紋理存儲器130的頁130中的瓦片加載列表136中的在步驟520識別的瓦片ND1的入口設(shè)置為“L”,以表明必須獲得這個瓦片的圖案數(shù)據(jù)以繪制圖象。紋理存儲器的頁由存儲在基準緩沖器126中的象素單元300的字段310中的地址指示。
當(dāng)紋理坐標(S,T)L定義了在步驟520中識別的瓦片與一個或多個相鄰?fù)咂g的邊界上的一個點時,必須另外將相鄰?fù)咂耐咂虞d列表中的入口設(shè)置為“L”,以表明這些瓦片的圖案數(shù)據(jù)也必須被獲得。在步驟524,采用分別在步驟518和516獲得的余數(shù)(Sb,Tb)L和分數(shù)部分(Sf,Tf)L來執(zhí)行下面將參考圖5B詳細描述的子程序。該子程序檢查坐標(S,T)L是否定義了在步驟520中識別的瓦片與一個或多個相鄰?fù)咂g的邊界上的一個點,并且,如果需要的話,將另外的瓦片的瓦片加載列表入口設(shè)置為“L”,以使得這些瓦片的圖案數(shù)據(jù)也被獲得。在完成該子程序之后,執(zhí)行進行到步驟526。
如果存儲在基準緩沖器126的象素單元300的字段314中的D值是一個整數(shù),則可以通過只采用層DL中的圖案數(shù)據(jù)進行內(nèi)插來確定繪制屏幕象素的紋理色值。如同通常的情況,如果D的值具有非零的分數(shù)部分,則最好采用三線性內(nèi)插來產(chǎn)生紋理色值。三線性內(nèi)插另外還需要下一個更高分辨率層DG的圖案數(shù)據(jù)。層DG的層深比層DL的層深大1,即,DG=DL+1。圖5A所示程序的剩余步驟識別必須獲得其圖案數(shù)據(jù)以繪制圖象的更高分辨率層DG中的至少一個瓦片。
在步驟526,執(zhí)行一個測試,以確定在步驟510獲得的Df的值是否大于零,即,D的值是否是個整數(shù)。如果測試結(jié)果是NO,則執(zhí)行進行到步驟542,在這里,如上所述,遞增繪制屏幕象素地址。如果測試結(jié)果是YES,則執(zhí)行步驟528到540,將緊低于層DL的、線性分辨率兩倍于層DL的層DG中的一個或多個瓦片的瓦片加載列表入口設(shè)置為“L”。在下一個更低層DG中識別的一個或多個瓦片的圖案數(shù)據(jù)將被獲得,用于層間內(nèi)插。
在步驟528,將紋理坐標(S,T)L乘以2,以獲得層DG中的紋理坐標(S,T)G。
步驟530-540與步驟514-524基本類似,不同之處在于,在步驟530-540中所用的量以及在步驟530-540中計算出的量是關(guān)于層DG而不是層DL的。在步驟538,將層DG中的識別出的瓦片ND1的瓦片加載列表136中的入口設(shè)置為“L”,表明必須獲得這個瓦片的圖案數(shù)據(jù)以繪制圖象。將瓦片加載列表存儲在由存儲在基準緩沖器126中的象素單元300的字段310中的地址所指示的紋理存儲器130的頁132中??梢栽诓襟E540中執(zhí)行的子程序中對層DG中的另外的瓦片進行標記。在完成該子程序之后,執(zhí)行進行到步驟542。
在步驟542,遞增象素地址。在步驟544,執(zhí)行一個測試,以確定是否已經(jīng)處理了繪制屏幕中的所有象素。如果結(jié)果是YES,則執(zhí)行進行到步驟546,在這里返回如圖4B所示的主程序。如果測試結(jié)果是NO,則執(zhí)行進行到步驟502。
圖5B顯示了在圖5A所示過程的步驟524執(zhí)行的子程序的細節(jié)。該子程序確定紋理坐標(S,T)L是否定義了在步驟520中識別的瓦片與一個或多個相鄰?fù)咂g的邊界上的一個點,如果是這樣的話,標記瓦片加載列表中相鄰?fù)咂娜肟凇T诓襟E540執(zhí)行類似的子程序,但運用到與紋理坐標(S,T)G上。
執(zhí)行開始于步驟551。
在步驟553,執(zhí)行測試,以確定紋理坐標(S,T)L是否定義了在步驟520中識別出的瓦片的垂直邊沿上的一點。這樣的一點在識別出的瓦片與水平方向上的相鄰?fù)咂倪吔缟?。?zhí)行測試以確定在步驟518產(chǎn)生的余數(shù)(Sb)L是否等于TWL-1,執(zhí)行測試以確定在步驟516產(chǎn)生的坐標SL的分數(shù)部分(Sf)L是否大于零。如果任何一個測試結(jié)果是NO,則執(zhí)行進行到步驟561。如果兩個測試結(jié)果都為YES,則表明由坐標(S,T)L定義的點在所識別瓦片的垂直邊沿上,執(zhí)行進行到步驟555。
在步驟555,將瓦片號為ND1+1的瓦片的瓦片加載列表中的入口設(shè)置為“L”。執(zhí)行然后進行到步驟557。
在步驟557,執(zhí)行測試以確定坐標(S,T)L是否定義了在步驟520識別出的瓦片的角上的一個點。這樣的一點在識別出的瓦片與在水平和垂直方向上的相鄰?fù)咂倪吔缟?。?zhí)行一個測試以確定在步驟518產(chǎn)生的余數(shù)(Tb)L是否等于THL-1,執(zhí)行一個測試以確定在步驟516產(chǎn)生的坐標TL的分數(shù)部分(Tf)L是否大于零。如果任何一個測試結(jié)果是NO,則執(zhí)行進行到步驟561。如果兩個測試結(jié)果都為YES,則表明由坐標(S,T)L定義的點在所識別瓦片的角上,執(zhí)行進行到步驟559。
在步驟559,將瓦片號為ND1+WL+1的瓦片的瓦片加載列表中的入口設(shè)置為“L”。執(zhí)行然后進行到步驟561。
在步驟561,執(zhí)行測試以確定紋理坐標(S,T)L是否定義了在步驟520中識別出的瓦片的水平邊沿上的一點。這樣的一點在識別出的瓦片與垂直方向上的相鄰?fù)咂倪吔缟?。所?zhí)行的測試與在步驟557中執(zhí)行的相同,即,測試確定在步驟518產(chǎn)生的余數(shù)(Tb)L是否等于THL-1,執(zhí)行測試以確定在步驟516產(chǎn)生的坐標TL的分數(shù)部分(Tf)L是否大于零。如果任何一個測試結(jié)果是NO,則執(zhí)行進行到步驟565,從這里返回主程序。如果兩個測試結(jié)果都為YES,則表明由坐標(S,T)L定義的點在所識別瓦片的水平邊沿上,執(zhí)行進行到步驟563。
在步驟563,將瓦片號為ND1+WL的瓦片的瓦片加載列表中的入口設(shè)置為“L”。執(zhí)行然后進行到步驟565,從這里返回主程序。
圖6是用于執(zhí)行圖4B所示程序的步驟462的程序示例的詳細流程圖。該程序測試存儲在紋理數(shù)據(jù)存儲器130的每頁132中的瓦片加載列表136,獲取其瓦片加載列表入口被設(shè)置為“L”的瓦片的圖案數(shù)據(jù),并將還未獲得其圖案數(shù)據(jù)的瓦片的瓦片加載列表入口設(shè)置為“E”。通過合成或加載來獲取圖案數(shù)據(jù)。對紋理數(shù)據(jù)存儲在紋理數(shù)據(jù)存儲器130的頁132中的每個紋理執(zhí)行該程序。在已經(jīng)對基準緩沖器126中的每個單元執(zhí)行了圖4B所示程序的步驟461之后,將必須獲得其圖案數(shù)據(jù)的每個瓦片的瓦片加載列表中的入口設(shè)置為“L”。
執(zhí)行從步驟600開始。測試對應(yīng)于圖2所示塔形數(shù)據(jù)結(jié)構(gòu)的各層的瓦片加載列表的各部分,從對應(yīng)于具有最高紋理分辨率的底層的部分開始。在下面的解釋中,將對應(yīng)于被測試的瓦片加載列表部分的層稱作為當(dāng)前層。將層深比當(dāng)前層小1的層稱作為上一層。將層深比當(dāng)前層大1的層稱作為下一層。
在步驟602,將層深索引d的值設(shè)置為Dmax,即底(最高分辨率)層的層深。
在步驟604,將瓦片索引t設(shè)置為Bd,即當(dāng)前層的瓦片基數(shù)值。
在步驟606,執(zhí)行一個測試,以確定是否將具有瓦片索引t的瓦片的瓦片加載列表(在圖中簡寫為TLL)中的入口設(shè)置為“L”。如果測試結(jié)果為NO,表明瓦片的圖案數(shù)據(jù)不需要必須獲得,執(zhí)行進行到步驟618。如果測試結(jié)果是YES,執(zhí)行進行到步驟608。
在步驟608,執(zhí)行一個測試,以確定表明當(dāng)前層的層深索引d是否小于圖2所示塔形數(shù)據(jù)結(jié)構(gòu)200的底層202的層深Dmax。存儲在底層中的圖案數(shù)據(jù)不能被合成,因為沒有更高分辨率的圖案數(shù)據(jù)可用來合成底層的圖案數(shù)據(jù)。因此,如果測試結(jié)果是NO,則表明當(dāng)前層是底層,執(zhí)行進行到步驟610,在這里將具有瓦片索引t的瓦片的圖案數(shù)據(jù)進行加載,并存儲在由紋理存儲器130的紋理頁132中的塔形數(shù)據(jù)結(jié)構(gòu)134中的索引所表明的位置。執(zhí)行然后進行到步驟616,這將在下面進行說明。
如果在步驟608的測試結(jié)果是YES,則執(zhí)行進行到步驟612。測試結(jié)果YES表明當(dāng)前層高于底層,因此存在著可以從位于下一層、即層深為d+1的更高分辨率層的源瓦片的圖案數(shù)據(jù)合成當(dāng)前層中瓦片的圖案數(shù)據(jù)的可能。合成圖案數(shù)據(jù)通常比加載圖案數(shù)據(jù)更好,因為合成圖案數(shù)據(jù)會比加載圖案數(shù)據(jù)更快。
在步驟612,執(zhí)行一個測試,以確定具有瓦片索引t的瓦片的源瓦片的瓦片加載列表中的入口是否都設(shè)置為“E”。源瓦片是位于下一層的、其圖案數(shù)據(jù)可用于合成當(dāng)前層中的瓦片的圖案數(shù)據(jù)的瓦片。這種合成可以只在如同所有源瓦片的瓦片加載列表入口中的“E”所指示的、所有所需源瓦片的圖案數(shù)據(jù)都在塔形數(shù)據(jù)結(jié)構(gòu)中存在的情況下執(zhí)行。需要下一層中的四個源瓦片的圖案數(shù)據(jù)來合成當(dāng)前層中的大多數(shù)瓦片的圖案數(shù)據(jù)。然而,只需要兩個源瓦片的圖案數(shù)據(jù)來合成位于當(dāng)前層的右邊和底邊界的瓦片的圖案數(shù)據(jù)。此外,只有一個源瓦片的圖案數(shù)據(jù)用于位于當(dāng)前層的右下角的瓦片的圖案數(shù)據(jù)。
如果步驟612的測試結(jié)果是NO,則表明沒有足夠的圖案數(shù)據(jù)存在于下一層中來合成當(dāng)前層中具有瓦片索引t的瓦片,執(zhí)行進行到步驟610。在步驟610,如上所述加載具有瓦片索引t的瓦片的圖案數(shù)據(jù)。如果測試結(jié)果是YES,則執(zhí)行進行到步驟614。
在步驟614,從下一層中的源瓦片的圖案數(shù)據(jù)合成當(dāng)前層中具有瓦片索引t的瓦片的圖案數(shù)據(jù)。將合成的圖案數(shù)據(jù)存儲在由紋理存儲器130的紋理頁132中的塔形數(shù)據(jù)結(jié)構(gòu)134中的瓦片索引所指示的位置中。執(zhí)行然后進行到步驟616。
在步驟616,將具有瓦片索引t的瓦片的瓦片加載列表的入口設(shè)置為“E”,“E”表明該瓦片的圖案數(shù)據(jù)現(xiàn)在存在于紋理的塔形數(shù)據(jù)結(jié)構(gòu)中,這是通過在步驟614合成或在步驟610加載所獲得的結(jié)果。
在步驟618,遞增瓦片索引。
在步驟620,執(zhí)行一個測試,以確定是否已經(jīng)測試了當(dāng)前層中所有瓦片的瓦片加載列表入口。這是通過測試瓦片索引的值是否大于Bd+1、即下一層的瓦片基數(shù)的值來實現(xiàn)的。當(dāng)當(dāng)前層是底(最高分辨率)層時,存儲在瓦片基數(shù)陣列中的瓦片的總數(shù)值被用作為低于底層的(非現(xiàn)存)層的瓦片基數(shù)。如果測試結(jié)果是NO,執(zhí)行返回步驟606,從而可以測試當(dāng)前層中另一個瓦片的瓦片加載列表入口。如果測試結(jié)果是YES,則表明已經(jīng)獲得當(dāng)前層的所有可能的圖案數(shù)據(jù),執(zhí)行進行到步驟622。
在步驟622,將層深索引d遞減1。
在步驟624,執(zhí)行一個測試,以確定當(dāng)前層的層深d是否小于零,即頂(最高分辨率)層的層深。如果測試結(jié)果是NO,則執(zhí)行返回步驟604,以便可以獲得上一層的圖案數(shù)據(jù)。如果測試結(jié)果是YES,則表明已經(jīng)獲得了其瓦片加載列表入口被設(shè)置為“L”的所有瓦片的圖案數(shù)據(jù),執(zhí)行進行到步驟626,從這里返回圖4B所示的程序。
圖7A顯示了在圖4B所示主程序的步驟463中執(zhí)行的產(chǎn)生以最佳分辨率顯示方式繪制屏幕象素的最終色值的程序的細節(jié)。對繪制屏幕的在象素的基準緩沖器單元300的字段301中具有1的每個象素執(zhí)行這個程序。這個字段中的1表明繪制屏幕象素對應(yīng)于位于要運用紋理的多邊形中的一個對象象素。通過將在步驟454計算出的亮度系數(shù)乘以通過從在步驟462獲得的圖案數(shù)據(jù)進行三線性內(nèi)插而獲得的紋理色值來獲得每個繪制屏幕象素的最終色值。執(zhí)行從步驟700開始。
在步驟702,程序訪問基準緩沖器126中的象素單元300,并讀取紋理坐標S、T和層深D。這些參數(shù)都是實數(shù)。
在步驟704,確定塔形數(shù)據(jù)結(jié)構(gòu)的用于執(zhí)行層間內(nèi)插以獲得層深為在步驟702讀取的值D的紋理色值的兩層的層深。如上所述,這兩層中夾有層深D。將層深D分成整數(shù)部分DL和分數(shù)部分Df。另外,將DL遞增1以獲得DG(=DL+1)。兩層中較高分辨率的是層深為DG的那層。兩層中較低分辨率的是層深為DL的那層。
在步驟706,執(zhí)行一個測試,以確定DG是否大于最大層深Dmax。如果測試結(jié)果是NO,則執(zhí)行進行到步驟710。如果測試結(jié)果是YES,則執(zhí)行進行到步驟708,在這里將DL和DG都設(shè)置為Dmax,將分數(shù)部分Df設(shè)置為零。執(zhí)行然后進行到步驟710。
在步驟710,將層深為Dmax的底(最高分辨率)層中的紋理坐標(S,T)變換成層DL的紋理坐標(S,T)L。可以采用上述參考圖5A的步驟510和512描述的過程。識別出與由紋理坐標(S,T)L定義的點最近的層DL中的象素,并計算它們距離點(S,T)L的距離。然后采用識別出的、被根據(jù)它們距離點(S,T)L的距離逆加權(quán)的紋理象素的紋理色值執(zhí)行第一層內(nèi)內(nèi)插操作。第一層內(nèi)內(nèi)插操作計算位于紋理坐標(S,T)L的紋理象素的紋理色值R1、G1、B1。
在步驟712,執(zhí)行一個測試,以確定分數(shù)部分Df是否大于零。如果測試結(jié)果是N0,則表明不需要層間內(nèi)插,執(zhí)行進行到步驟714,在這里將紋理色值R0、G0、B0分別設(shè)置為在步驟710計算出的紋理色值R1、G1、B1的值。執(zhí)行然后進行到步驟720,這將在下面進行描述。如果測試結(jié)果是YES,則表明需要層間內(nèi)插,執(zhí)行進行到步驟716。
在步驟716,將紋理坐標(S,T)變換成層DG的紋理坐標(S,T)G。識別出與由紋理坐標(S,T)G定義的點最近的層DG中的象素,并計算它們距離點(S,T)G的距離。然后采用識別出的、被根據(jù)它們距離點(S,T)G的距離逆加權(quán)的紋理象素的紋理色值執(zhí)行第二層內(nèi)內(nèi)插操作。第二層內(nèi)內(nèi)插操作計算位于紋理坐標(S,T)G的紋理象素的紋理色值R2、G2、B2。
在步驟718,執(zhí)行一個層間內(nèi)插操作,以產(chǎn)生位于層深為D的層中的坐標(S,T)D處的紋理坐標的紋理色值。該內(nèi)插采用層DL的紋理色值R1、G1、B1、層DG的紋理色值R2、G2、B2以及層深D的分數(shù)部分Df作為加權(quán)因子。層間內(nèi)插操作產(chǎn)生紋理色值R0、G0、B0。
在步驟720,從基準緩沖器126中的象素單元300的字段316讀取繪制屏幕象素的亮度系數(shù),并乘以在步驟714或在步驟718產(chǎn)生的紋理色值R0、G0、B0,采用哪一步驟產(chǎn)生的紋理色值取決于層間內(nèi)插是否必要。將所得的最終色值存儲在象素/景深緩沖器124中的繪制屏幕象素位置。
執(zhí)行進行到步驟722,從這里返回主程序。
圖7B顯示了在圖4B所示主程序的步驟472中執(zhí)行的產(chǎn)生以漸進分辨率顯示方式繪制屏幕象素的最終色值的程序的細節(jié)。對繪制屏幕的在基準緩沖器126的象素單元300的字段301中具有1的每個象素執(zhí)行這個程序。這個字段中的1表明該象素是從位于要運用紋理的多邊形中的一個對象象素導(dǎo)出的。通過將在步驟454計算出的亮度系數(shù)乘以紋理色值來獲得最終色值。紋理色值是通過從當(dāng)前獲得的瓦片的圖案數(shù)據(jù)、即在第一次執(zhí)行由步驟472-477組成的分辨率提高循環(huán)時在步驟471獲得的圖案數(shù)據(jù)、以及在隨后執(zhí)行的分辨率提高循環(huán)中在步驟471獲得的圖案數(shù)據(jù)和在步驟477獲得的圖案數(shù)據(jù)進行內(nèi)插而獲得的。如果由當(dāng)前獲得的瓦片的圖案數(shù)據(jù)提供的分辨率對于主程序的步驟454中計算出的層深D來說不夠,則分辨率提高循環(huán)將需要獲取其圖案數(shù)據(jù)以提供所需分辨率的瓦片的瓦片加載列表入口設(shè)置為“L”,以表明在下一次執(zhí)行步驟477時需要獲取該圖案數(shù)據(jù)。執(zhí)行從步驟750開始。
步驟752、754、756和758與上面結(jié)合圖7A描述的步驟702、704、706和708相同,這里不再說明。
在步驟760-766,測試紋理的瓦片加載列表中的入口,以便定位最高分辨率的當(dāng)前獲得的瓦片或多個瓦片,所述瓦片可用于內(nèi)插位于紋理坐標(S,T)的紋理象素的紋理色值。在一層中用于內(nèi)插位于紋理坐標(S,T)的紋理象素的紋理色值所需的瓦片數(shù)可以是1、2或4,如上所述,這取決于紋理坐標是否定義了全部位于一個瓦片內(nèi)、在兩個瓦片之間的邊界上或在四個瓦片之間的角上的一點。瓦片加載列表測試從對應(yīng)于塔形數(shù)據(jù)結(jié)構(gòu)的層DG的瓦片加載列表的部分開始。如果層DG的瓦片加載列表入口表明內(nèi)插在紋理坐標(S,T)的紋理象素的紋理色值所需的一個或多個瓦片的圖案數(shù)據(jù)存在于該層中,則從這些瓦片的圖案數(shù)據(jù)內(nèi)插出紋理色值。另外,測試上一(較低分辨率)層DG-1的瓦片加載列表入口。測試漸進更高層、即更低分辨率層的瓦片加載列表入口,直到找到包括所需圖案數(shù)據(jù)的層。測試過程總是以有效結(jié)果結(jié)束,因為頂部瓦片的圖案數(shù)據(jù)在這個程序執(zhí)行之前在主程序的步驟471中加載。
在步驟760,將層深索引d設(shè)置為DG。在步驟762,執(zhí)行與上述參考圖5A描述的類似的程序,以識別當(dāng)前層中對應(yīng)于紋理坐標(S,T)的瓦片或多個瓦片。在步驟764,執(zhí)行一個測試,以確定在步驟762識別的所有瓦片的瓦片加載列表入口是否被設(shè)置為“E”,表明已經(jīng)獲得瓦片的圖案數(shù)據(jù),并存儲在紋理的塔形數(shù)據(jù)結(jié)構(gòu)中。
如果步驟764的測試結(jié)果是NO,表明所需的圖案數(shù)據(jù)在當(dāng)前層中不存在,執(zhí)行進行到步驟766,在這里將層索引遞減1。執(zhí)行然后返回步驟762,測試上一(更低分辨率)層的瓦片加載列表部分。如果測試結(jié)果是YES,表明當(dāng)前層包括內(nèi)插位于紋理坐標(S,T)的紋理象素的紋理色值所必須的圖案數(shù)據(jù),執(zhí)行進行到步驟768。
在步驟768,將變量D1設(shè)置為層索引d的當(dāng)前值。變量D1的值表明瓦片加載列表測試結(jié)束的那一層的層深。
在步驟770,采用在步驟762識別的層D1的一個或多個瓦片的圖案數(shù)據(jù)來執(zhí)行層內(nèi)內(nèi)插操作。內(nèi)插操作可以用上面參考圖7A的步驟710所述的方法來執(zhí)行。內(nèi)插操作產(chǎn)生位于紋理坐標(S,T)的紋理象素的紋理色值R1、G1和B1。
如果D1小于DG,這意味著對于在主程序的步驟454計算出的層深D產(chǎn)生了帶有不足的分辨率的紋理色值。需要獲取另外的圖案數(shù)據(jù)來提供所需的分辨率。因此,在步驟772,執(zhí)行一個測試以確定D1是否等于DG。
如果測試結(jié)果是NO,執(zhí)行進行到步驟774,在這里將紋理色值R0、G0和B0分別設(shè)置為在步驟770計算出的紋理色值R1、G1和B1的值。執(zhí)行然后進行到步驟776,在這里將內(nèi)插位于紋理坐標(S,T)的紋理象素的紋理色值所需的層深為D1+1的層中的一個或多個瓦片的瓦片加載列表入口設(shè)置為“L”。這個設(shè)置表明在下次執(zhí)行上面參考圖4B所述的主程序的步驟477時必須獲得這些瓦片的圖案數(shù)據(jù)。
執(zhí)行然后進行到步驟778,這將在下面進行說明。
如果在步驟778獲得的測試結(jié)果是YES,則執(zhí)行進行到步驟780。YES結(jié)果表明D1等于DG,以所需分辨率內(nèi)插位于紋理坐標(S,T)的紋理象素的紋理色值所需的一個或多個瓦片的圖案數(shù)據(jù)存在于塔形數(shù)據(jù)結(jié)構(gòu)中。
在步驟780,采用層DL=DG-1的一個或多個瓦片的圖案數(shù)據(jù)執(zhí)行層內(nèi)內(nèi)插操作。內(nèi)插操作可以采用上面參考圖7A的步驟710所述的方法來執(zhí)行。內(nèi)插操作產(chǎn)生位于層DL中的紋理坐標(S,T)L的紋理象素的紋理色值R2、G2和B2。
在步驟782,在步驟770產(chǎn)生的層DG的紋理色值R1、G1、B1和在步驟780產(chǎn)生的層DL的紋理色值R2、G2、B2之間執(zhí)行層D中紋理坐標(S,T)處的紋理象素的層間內(nèi)插。該內(nèi)插采用層深D的分數(shù)部分Df作為加權(quán)因子。層間內(nèi)插產(chǎn)生紋理色值R0、G0、B0。
在步驟778,從基準緩沖器126中的象素單元300的字段316讀取繪制屏幕象素的亮度系數(shù),并乘以在步驟770或在步驟782產(chǎn)生的紋理色值R0、G0、B0。將所得的繪制屏幕象素的最終色值存儲在象素/景深緩沖器124中的繪制屏幕象素位置。
執(zhí)行然后進行到步驟784,從這里返回主程序。
上面已經(jīng)參考例子描述了本發(fā)明,其中,將瓦片以常規(guī)掃描順序、即從左到右從上到下地排列在塔形數(shù)據(jù)結(jié)構(gòu)的各層中。然而,各層中瓦片的排列并不是關(guān)鍵的,可以采用不同的排列。如果采用不同的排列,則對位于層的左上、右邊和底沿以及右下角的瓦片的基準也應(yīng)相應(yīng)地改變。
雖然這個說明書詳細描述了本發(fā)明的例示實施例,但應(yīng)該理解,本發(fā)明并不限于所述的精確實施例,而是可以在由附帶的權(quán)利要求書限定的范圍內(nèi)進行各種修改。
權(quán)利要求
1.一種響應(yīng)于三維圖形數(shù)據(jù)繪制圖象的繪制裝置,所述裝置包括一個輸入路徑,繪制裝置通過所述輸入路徑可以接收三維圖形數(shù)據(jù),三維圖形數(shù)據(jù)包括多邊形數(shù)據(jù),另外還包括定義紋理的紋理數(shù)據(jù),紋理數(shù)據(jù)包括紋理尺寸數(shù)據(jù)和多組圖案數(shù)據(jù),每組中的圖案數(shù)據(jù)表示具有不同分辨率的紋理,圖案數(shù)據(jù)構(gòu)成紋理數(shù)據(jù)的主要部分;包括第一存儲器單元的象素/景深緩沖器,第一存儲器單元對應(yīng)于一個繪制屏幕的象素;包括第二存儲器單元的基準緩沖器,第二存儲器單元對應(yīng)于繪制屏幕的象素;以及繪制機,執(zhí)行初始光柵化操作,僅僅采用多邊形和紋理尺寸數(shù)據(jù)來為繪制屏幕的每個象素產(chǎn)生紋理標識符、表明紋理分辨率的層深值以及紋理坐標,并存儲在基準緩沖器中;響應(yīng)每個繪制屏幕象素的存儲在基準緩沖器中的紋理標識符、層深和紋理坐標來識別繪制圖象所需的一些圖案數(shù)據(jù);通過路徑來獲得被識別為繪制圖象所需的那些圖案數(shù)據(jù);以及采用通過路徑獲得的圖案數(shù)據(jù)來產(chǎn)生表示圖象的圖象數(shù)據(jù),所述路徑具有明顯小于繪制機與緩沖器之間的數(shù)據(jù)傳輸率的數(shù)據(jù)傳輸率。
2.如權(quán)利要求1所述的繪制裝置,其中層深值是具有整數(shù)部分和分數(shù)部分的實數(shù);當(dāng)層深值的分數(shù)部分是零時,繪制機在由層深值的整數(shù)部分所指示的一組圖案數(shù)據(jù)中的圖案數(shù)據(jù)中執(zhí)行第一層內(nèi)內(nèi)插,以產(chǎn)生可以導(dǎo)出圖象數(shù)據(jù)的紋理色值;以及當(dāng)層深值的分數(shù)部分不為零時,繪制機執(zhí)行第一層內(nèi)內(nèi)插,在具有比所述組高一級的分辨率的另一組中的圖案數(shù)據(jù)中執(zhí)行第二層內(nèi)內(nèi)插,并在由第一和第二層內(nèi)內(nèi)插產(chǎn)生的結(jié)果之間執(zhí)行層間內(nèi)插,以產(chǎn)生可以導(dǎo)出圖象數(shù)據(jù)的紋理色值。
3.如權(quán)利要求1或2所述的繪制裝置,其中由繪制機執(zhí)行的初始光柵化操作另外還為繪制屏幕的每個象素產(chǎn)生亮度系數(shù);以及將亮度系數(shù)另外存儲在基準緩沖器的第二存儲器單元中的一個,第二存儲器單元中的一個對應(yīng)于繪制屏幕的一個象素。
4.如權(quán)利要求1、2或3所述的繪制裝置,其中圖案數(shù)據(jù)屬于在矩形瓦片中排列的紋理象素;所述裝置另外還包括紋理的瓦片加載列表,瓦片加載列表包括每個瓦片的入口;以及當(dāng)繪制機識別出繪制屏幕所需的一些圖案數(shù)據(jù)時,繪制機從基準緩沖器讀取紋理坐標,以識別繪制圖象所需的圖案數(shù)據(jù)所位于的瓦片中的一個,并將一個瓦片的瓦片加載列表中的入口設(shè)置為一個表明需要所述一個瓦片的圖案數(shù)據(jù)來繪制圖象的加載狀態(tài)。
5.如權(quán)利要求4所述的繪制裝置,其中,當(dāng)繪制機獲得繪制圖象所需的圖案數(shù)據(jù)時,繪制機測試該紋理的瓦片加載列表,以識別被設(shè)置為加載狀態(tài)的入口,獲取識別出其瓦片加載列表中的入口被設(shè)置為加載狀態(tài)的每個瓦片的圖案數(shù)據(jù),以及,將已經(jīng)獲得其圖案數(shù)據(jù)的每個瓦片的瓦片加載列表中的入口從加載狀態(tài)改變成存在狀態(tài),存在表明已經(jīng)獲得所述一個瓦片的圖案數(shù)據(jù)。
6.如權(quán)利要求1-5中的任何一個所述的繪制裝置,另外還包括紋理存儲器,圖案數(shù)據(jù)以塔形數(shù)據(jù)結(jié)構(gòu)存儲在其中,塔形數(shù)據(jù)結(jié)構(gòu)包括多層,在每層中存儲著一組相應(yīng)的表示具有不同分辨率的紋理的圖案數(shù)據(jù),其中一組圖案數(shù)據(jù)表示具有最高分辨率的紋理。
7.如權(quán)利要求6所述的繪制裝置,其中圖案數(shù)據(jù)屬于在矩形瓦片中排列的紋理象素;繪制裝置另外還包括紋理的瓦片加載列表,瓦片加載列表包括每個瓦片的入口,所述入口表明何時獲取一個瓦片的圖案數(shù)據(jù);以及當(dāng)繪制機獲得位于塔形數(shù)據(jù)結(jié)構(gòu)的一層的一個瓦片的圖案數(shù)據(jù)時,繪制機檢查瓦片加載列表以確定是否已經(jīng)獲得位于在所述一層的下一層的源瓦片的圖案數(shù)據(jù),其中源瓦片是可以從其合成所述一個瓦片的圖案數(shù)據(jù)的多個瓦片,以及,從源瓦片的圖案數(shù)據(jù)合成所述一個瓦片的圖案數(shù)據(jù)。
8.如權(quán)利要求6所述的繪制裝置,其中圖案數(shù)據(jù)屬于在矩形瓦片中排列的紋理象素;繪制機通過由路徑加載構(gòu)成塔形數(shù)據(jù)結(jié)構(gòu)的頂層的瓦片中的一個的圖案數(shù)據(jù)來獲取繪制圖象所需的圖案數(shù)據(jù)的初始部分,并存儲塔形數(shù)據(jù)結(jié)構(gòu)的一個瓦片;以及繪制機從塔形數(shù)據(jù)結(jié)構(gòu)中現(xiàn)有的圖案數(shù)據(jù)產(chǎn)生圖象數(shù)據(jù),然后,識別塔形數(shù)據(jù)結(jié)構(gòu)的需要其圖案數(shù)據(jù)以便以更高分辨率繪制圖象的多個瓦片,獲取所識別瓦片的圖案數(shù)據(jù),并以更高分辨率重新產(chǎn)生圖象數(shù)據(jù)。
9.如權(quán)利要求8所述的繪制裝置,其中,繪制機重復(fù)地執(zhí)行一個程序,在所述程序中,識別需要其圖案數(shù)據(jù)以便以更高分辨率繪制圖象的多個瓦片,獲取所識別瓦片的圖案數(shù)據(jù),并且以更高分辨率重新產(chǎn)生圖象數(shù)據(jù),將這個程序一直重復(fù)到全部產(chǎn)生了具有最佳分辨率的圖象數(shù)據(jù),圖象數(shù)據(jù)的最佳分辨率對應(yīng)于小于最高分辨率的繪制屏幕象素的一個子集。
10.如權(quán)利要求1-5中的任何一個所述的繪制裝置,其中,繪制機通過(a)通過路徑加載圖案數(shù)據(jù),以及(b)合成圖案數(shù)據(jù)這二者中的一個來獲取繪制圖象所需的圖案數(shù)據(jù)。
11.一種響應(yīng)于三維圖形數(shù)據(jù)繪制圖象的方法,圖象由對應(yīng)于繪制屏幕的象素的圖象數(shù)據(jù)表示,三維圖形數(shù)據(jù)包括多邊形數(shù)據(jù),另外還包括定義紋理的紋理數(shù)據(jù),紋理數(shù)據(jù)包括紋理尺寸數(shù)據(jù)和多組圖案數(shù)據(jù),每組中的圖案數(shù)據(jù)表示具有不同分辨率的紋理,圖案數(shù)據(jù)構(gòu)成紋理數(shù)據(jù)的的主要部分,所述方法包括接收多邊形和紋理尺寸數(shù)據(jù);為繪制屏幕的每個象素執(zhí)行初始光柵化操作,初始光柵化操作采用多邊形和紋理尺寸數(shù)據(jù)來執(zhí)行,初始光柵化操作產(chǎn)生并存儲紋理標識符、表明紋理分辨率的層深值以及紋理坐標;響應(yīng)為每個繪制屏幕象素存儲的紋理標識符、層深和紋理坐標執(zhí)行圖案數(shù)據(jù)識別操作,圖案數(shù)據(jù)識別操作識別繪制圖象所需的一些圖案數(shù)據(jù);執(zhí)行圖案數(shù)據(jù)獲取操作,在這個操作中,獲取由圖案數(shù)據(jù)識別操作識別為繪制圖象所需的那些圖案數(shù)據(jù);以及執(zhí)行最終光柵化操作,在這個操作中,采用由圖案數(shù)據(jù)獲取操作獲取的圖案數(shù)據(jù)產(chǎn)生表示圖象的圖象數(shù)據(jù)。
12.如權(quán)利要求11所述的圖象繪制方法,其中執(zhí)行初始光柵化操作產(chǎn)生一個層深值,所述層深值是具有整數(shù)部分和分數(shù)部分的實數(shù);以及執(zhí)行最終光柵化操作包括當(dāng)層深值的分數(shù)部分是零時,在由層深值的整數(shù)部分所指示的一組圖案數(shù)據(jù)中的圖案數(shù)據(jù)中執(zhí)行第一層內(nèi)內(nèi)插,以產(chǎn)生紋理色值,并從紋理色值導(dǎo)出圖象數(shù)據(jù),以及當(dāng)層深值的分數(shù)部分不為零時,執(zhí)行第一層內(nèi)內(nèi)插,在具有比所述組高一級的分辨率的另一組中的圖案數(shù)據(jù)中執(zhí)行第二層內(nèi)內(nèi)插,在由第一和第二層內(nèi)內(nèi)插操作產(chǎn)生的結(jié)果之間執(zhí)行層間內(nèi)插,以產(chǎn)生紋理色值,并從紋理色值導(dǎo)出圖象數(shù)據(jù)。
13.如權(quán)利要求11或12所述的圖象繪制方法,其中初始光柵化操作另外還為繪制屏幕的一個象素產(chǎn)生亮度系數(shù);以及將亮度系數(shù)與繪制屏幕的一個象素的紋理標識符、層深值和紋理坐標一起存儲。
14.如權(quán)利要求11、12或13所述的圖象繪制方法,其中圖案數(shù)據(jù)屬于在矩形瓦片中排列的紋理象素;所述方法另外還包括提供紋理的瓦片加載列表,瓦片加載列表包括每個瓦片的入口;以及圖案數(shù)據(jù)識別操作包括讀取紋理坐標,以識別繪制圖象所需的圖案數(shù)據(jù)所位于的瓦片中的一個,以及將一個瓦片的瓦片加載列表中的入口設(shè)置為一個加載狀態(tài),加載狀態(tài)表明需要所述一個瓦片的圖案數(shù)據(jù)來繪制圖象。
15.如權(quán)利要求14所述的圖象繪制方法,其中,圖案數(shù)據(jù)獲取操作包括測試所述紋理的瓦片加載列表,以識別被設(shè)置為加載狀態(tài)的入口;獲取識別出其瓦片加載列表中的入口被設(shè)置為加載狀態(tài)的每個瓦片的圖案數(shù)據(jù);以及將已經(jīng)獲得其圖案數(shù)據(jù)的每個瓦片的瓦片加載列表中的入口從加載狀態(tài)改變成存在狀態(tài),存在表明已經(jīng)獲得所述一個瓦片的圖案數(shù)據(jù)。
16.如權(quán)利要求11-15中的任何一個所述的圖象繪制方法,另外還包括提供紋理存儲器;以及將由圖案數(shù)據(jù)獲取操作獲取的圖案數(shù)據(jù)以塔形數(shù)據(jù)結(jié)構(gòu)存儲在紋理存儲器中,塔形數(shù)據(jù)結(jié)構(gòu)包括多層,在每層中存儲著一組相應(yīng)的表示具有不同分辨率的紋理的圖案數(shù)據(jù),其中一組圖案數(shù)據(jù)表示具有最高分辨率的紋理。
17.如權(quán)利要求16所述的圖象繪制方法,其中圖案數(shù)據(jù)屬于在矩形瓦片中排列的紋理象素;所述方法另外還包括提供紋理的瓦片加載列表,瓦片加載列表包括每個瓦片的入口,所述入口具有一個表明一個瓦片的圖案數(shù)據(jù)在塔形數(shù)據(jù)結(jié)構(gòu)中存在的狀態(tài);以及所執(zhí)行的為獲得位于塔形數(shù)據(jù)結(jié)構(gòu)的一層的一個瓦片的圖案數(shù)據(jù)的圖案數(shù)據(jù)獲取操作包括檢查瓦片加載列表以確定位于在所述一層的下一層的源瓦片的圖案數(shù)據(jù)是否在塔形數(shù)據(jù)結(jié)構(gòu)中存在,其中源瓦片是可以從其合成所述一個瓦片的圖案數(shù)據(jù)的多個瓦片,以及當(dāng)源瓦片的圖案數(shù)據(jù)在塔形數(shù)據(jù)結(jié)構(gòu)中存在時,從源瓦片的圖案數(shù)據(jù)合成所述一個瓦片的圖案數(shù)據(jù)。
18.如權(quán)利要求16所述的圖象繪制方法,其中圖案數(shù)據(jù)屬于在矩形瓦片中排列的紋理象素;將構(gòu)成塔形數(shù)據(jù)結(jié)構(gòu)的頂層的瓦片中的一個的圖案數(shù)據(jù)接收并存儲在塔形數(shù)據(jù)結(jié)構(gòu)中,在執(zhí)行圖案數(shù)據(jù)識別操作之前執(zhí)行最終光柵化操作,最終光柵化操作從塔形數(shù)據(jù)結(jié)構(gòu)中現(xiàn)有的圖案數(shù)據(jù)產(chǎn)生圖象數(shù)據(jù);圖案數(shù)據(jù)識別操作識別塔形數(shù)據(jù)結(jié)構(gòu)的需要其圖案數(shù)據(jù)以便以更高分辨率繪制圖象的多個瓦片;以及所述方法還包括在圖案數(shù)據(jù)獲取操作之后重復(fù)最終光柵化操作,以便以更高分辨率重新產(chǎn)生圖象數(shù)據(jù)。
19.如權(quán)利要求18所述的圖象繪制方法,其中,重復(fù)最終光柵化操作、圖案數(shù)據(jù)識別操作和圖案數(shù)據(jù)獲取操作,直到全部產(chǎn)生了具有最佳分辨率的圖象數(shù)據(jù),圖象數(shù)據(jù)的最佳分辨率對應(yīng)于小于最高分辨率的繪制屏幕象素的一個子集。
20.如權(quán)利要求11-15中的任何一個所述的圖象繪制方法,其中,圖案數(shù)據(jù)獲取操作包括通過(a)加載圖案數(shù)據(jù),以及(b)合成圖案數(shù)據(jù)這二者中的一個來獲取繪制圖象所需的圖案數(shù)據(jù)。
全文摘要
一種繪制裝置,包括繪制裝置通過其可以接收三維圖形數(shù)據(jù)的輸入路徑、象素/景深緩沖器、基準緩沖器和繪制機。三維圖形數(shù)據(jù)包括多邊形數(shù)據(jù),另外還包括定義紋理的紋理數(shù)據(jù)。紋理數(shù)據(jù)包括紋理尺寸數(shù)據(jù)和多組圖案數(shù)據(jù)。每組中的圖案數(shù)據(jù)表示具有不同分辨率的紋理。圖案數(shù)據(jù)構(gòu)成紋理數(shù)據(jù)的主要部分。象素/景深緩沖器和基準緩沖器分別包括對應(yīng)于繪制屏幕的象素的第一存儲器單元和第二存儲器單元。繪制機執(zhí)行初始光柵化操作,僅僅采用多邊形和紋理尺寸數(shù)據(jù)來為繪制屏幕的每個象素產(chǎn)生紋理標識符、表明紋理分辨率的層深值以及紋理坐標,并存儲在基準緩沖器中。繪制機還響應(yīng)每個繪制屏幕象素的存儲在基準緩沖器中的紋理標識符、層深和紋理坐標來識別繪制圖象所需的一些圖案數(shù)據(jù)。繪制機通過路徑來獲得被識別為繪制圖象所需的那些圖案數(shù)據(jù)。最后,繪制機采用通過路徑獲得的圖案數(shù)據(jù)來產(chǎn)生表示圖象的圖象數(shù)據(jù)。所述路徑具有明顯小于繪制機與緩沖器之間的數(shù)據(jù)傳輸率的數(shù)據(jù)傳輸率。
文檔編號G06T15/10GK1278351SQ98810791
公開日2000年12月27日 申請日期1998年10月30日 優(yōu)先權(quán)日1997年10月31日
發(fā)明者湯淺敬, M·E·戈斯 申請人:惠普公司