專利名稱:圖形光柵掃描中的三角形遍歷方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖像顯示方法和裝置,更具體地說,本發(fā)明涉及圖形光柵 掃描中的三角形遍歷方法和裝置。
背景技術(shù):
圖形光柵掃描過程是將幾何圖形(線,三角形,多邊形......)映射成
顯示器上的像素的過程。三角形的很多十分有用的性質(zhì),(如三角形是凸多 邊形,三角形永遠處于一個平面,可以很容易的通過三角形來構(gòu)建復(fù)雜的 多邊形)使其成為圖形學(xué)中最重要的幾何圖形。"三角形遍歷"過程是用來 找到所有位于三角形內(nèi)部的像素。
邊方程技術(shù)是三角形光柵掃描的基礎(chǔ)。"邊方程"指的是三角形三條 邊的直線方程。位于三角形內(nèi)部的像素其三條邊方程的值同時為正或同時 為負?;谶@個性質(zhì),邊方程可以很方便的用來判斷一個像素是否位于三 角形內(nèi)部。
目前已經(jīng)提出的一些基于邊方程的三角形遍歷方法如下三角形邊界
框遍歷方法;后向追蹤便利方法;Zigzag遍歷方法。
以上方法均為基于行的掃描遍歷方法。其基本思想都是首先構(gòu)造三角 形邊界框,然后根據(jù)某種掃描順序遍歷整個邊界框。
發(fā)明內(nèi)容
在本發(fā)明的一個方面中,給出了一種圖形光柵掃描中的三角形遍歷方 法。該方法包括以下步驟構(gòu)造作為可以覆蓋三角形的最小矩形像素框的 邊界框;基于該邊界框選擇遍歷三角形的遍歷起點;基于該遍歷起點與三 角形的位置關(guān)系選擇遍歷方向;以及從該遍歷起點沿該遍歷方向遍歷三角 形。其中,遍歷三角形的步驟包括針對遍歷起點和遍歷方向基于三角形的邊方程的斜率計算下一掃描起點的步驟。
在本發(fā)明的另一個方面中,給出了一種用于圖形光柵掃描中的三角形 遍歷的裝置。該裝置包括準備模塊104,接收三角形的頂點坐標,根據(jù) 頂點坐標計算三角形的邊方程的系數(shù)、構(gòu)造三角形的邊界框、選擇遍歷起
點和遍歷方向;以及遍歷模塊105,根據(jù)來自所述準備模塊104的所述邊 方程的系數(shù)、所述遍歷起點和遍歷方向,遍歷所述三角形。在所述遍歷過 程中,所述遍歷模塊105針對所述遍歷起點和遍歷方向,基于所述三角形 的邊方程的斜率計算下一掃描起點。
本發(fā)明的三角形遍歷方法和裝置通過在遍歷過程中盡可能的減少訪問 三角形外的像素,從而提高了效率。
圖l示出了用于繪制三角形的系統(tǒng)的框圖2概括示出了根據(jù)本發(fā)明的三角形遍歷方法的流程圖3詳細示出了圖1中的系統(tǒng)的準備模塊104和遍歷模塊105;
圖4示出了 一個三角形邊界框的示例;
圖5示出了構(gòu)造三角形邊界框的方法的流程圖6示出了四種情況下選擇的掃描起點;
圖7示出了選擇掃描起始點的方法的流程圖8示出了兩種不同情況下選擇的掃描方向;
圖9示出了一個三角形的完整掃描的示例;以及
圖10示出了在各種情況下計算下一個掃描行/列的掃描起點的流程圖。
具體實施例方式
在下面對本發(fā)明的具體實施方式
的詳細描述中闡述了很多具體細節(jié), 以便于充分理解本發(fā)明。但是,沒有這些具體細節(jié)也可以實施本發(fā)明,對 于本領(lǐng)域的技術(shù)人員來說是很明顯的。
三角形遍歷方法的效率主要取決于遍歷位于三角形外的像素的代價,本發(fā)明提出的方法就是希望在遍歷過程中盡可能的減少訪問三角形外的像 素。
圖1示出了用于繪制三角形的系統(tǒng)的框圖。該系統(tǒng)包括頂點存儲器
101、 變換模塊102、投影模塊103、準備模塊104、遍歷模塊105、幀緩 沖器106和顯示器107。
首先,關(guān)于對象坐標的頂點信息被從頂點存儲器讀取到變換模塊
102。 然后,在變換模塊102和投影模塊103中,對頂點的坐標進行變 換,,并且將經(jīng)過頂點坐標變換后的三角形投影到設(shè)備坐標。準備模塊 104和遍歷模塊105利用設(shè)備坐標計算哪些像素在三角形內(nèi),并且還計算 這些像素的參數(shù)(例如,顏色、紋理)。然后,參數(shù)被寫入到幀緩沖器 106中,顯示器107根據(jù)幀緩沖器107中的內(nèi)容進行顯示。
圖2概括示出了根據(jù)本發(fā)明的三角形遍歷方法的流程圖。本發(fā)明的遍 歷方法首先在步驟S201中創(chuàng)建邊界框,然后在步驟S202中挑選遍歷起 點,在步驟S203中挑選遍歷方向,然后在步驟S204中遍歷該三角形。
下面將對本發(fā)明的三角形遍歷方法和裝置進行更詳細地描述。
圖3詳細示出了圖1中的準備模塊104和遍歷模塊105。準備模塊104 包括邊方程計算模塊301、邊界框構(gòu)造模塊302、遍歷起點和方向選擇模 塊303。遍歷模塊105包括掃描起點登記模塊304、掃描模塊305、下一起 點計算模塊306、繪制判定模塊307和參數(shù)計算模塊308。
準備模塊104中的邊方程計算模塊301從投影模塊103接收三角形的 三個頂點的坐標VO (xO,yO)、 VI (xl,yl)、 V2 (x2,y2),其中,(xi,yi), i = 0、 1、 2均為浮點值。并且三個頂點VO、 VI、 V2按順時針排列。根據(jù)這 三個頂點坐標,邊方程計算模塊301計算出該三角形的三條邊的邊方程-
e0 (x, y) = aO*x + bO*y + cO;
el (x, y) = al*x + bl*y + cl;
e2 (x, y) = a2*x + b2*y + c2。
準備模塊104中的邊界框構(gòu)造模塊302根據(jù)從投影模塊103接收到的 三角形的三個頂點的坐標,構(gòu)造該三角形的邊界框。三角形邊界框是可以 覆蓋三角形的最小矩形像素框,由該矩形像素框的四個頂點像素坐標(xmin, ymin)、 (xmin, ymax)、 (xmax, ymin)禾口(xmax, ymax)表示。
圖4示出了三角形邊界框的一個例子。下面結(jié)合圖4的示例描述三角 形邊界框的構(gòu)造過程。三角形201的三個頂點的坐標分別為(xO,y0)、 (xl,yl)、 (x2,y2)。根據(jù)這三個頂點坐標,得到中間值
fxmin = min (x0,xl,x2), fxmax = max(x0,xl,x2),
fymin —— min (y0,yl,y2), fymax — max(y0,yl,y2) 其中min(), max()函數(shù)返回三個變量的最大值和最小值。fkmin、 femax、 fymin和、fymax均為浮點數(shù)。
由于像素點203位于整數(shù)位置,所以需要對上述中間值取整
xmin — ceil(fxmin) , xmax = floor(fxmax),
ymin = ceil(fymin) , ymax = floor(fymax) 其中ceil (float a)函數(shù)返回不小于a的最小整數(shù),如ceil (1.5) = 2。 floor (float a)函數(shù)返回不大于a的最大整數(shù),如floor (1.5) = 1 。
盡管圖4的示例沒有示出,但是,由于三角形的三個頂點可能位于顯 示平面之外,因此需要進行裁剪操作。假設(shè)顯示平面的范圍為[clip—xmin, clip—xmax] 、 [clip一ymin, clip—ymax],貝U:
if (xmin < clip—xmin) xmin = clip_xmin ;
if (ymin < clip—ymin) ymin = clip一ymin ;
if (xmax > clip—xmax) xmax — clip—xmax ;
if (ymax > clip—ymax) ymax = clip_ymax。
經(jīng)過以上過程,得到了三角形邊界框的四個頂點像素的坐標(xmin, ymin)、 (xmin, ymax)、 (xmax, ymin)禾口 (xmax, ymax)。
準備模塊104中的遍歷起點和方向選擇模塊303根據(jù)邊方程計算模塊 301計算的三角形的邊方程和邊界框構(gòu)造模塊302構(gòu)造的邊界框,判定掃 描起始點和掃描方向。
具體而言,遍歷起點和方向選擇模塊303按照圖5所示的過程,利用 來自邊界框構(gòu)造模塊302的fxmin、 fkmax、 fymin和、fymax,從邊界框構(gòu) 造模塊302計算出的邊界框的四個頂點(xmin,ymin)、 (xmin, ymax)、 (xmax, ymin)和(xmax, ymax)中選擇遍歷起點。遍歷起點為三角形邊界框的四個頂點(xmin, ymin)、 (xmin, ymax)、 (xmax, ymin)禾口(xmax, ymax)(左上,左
下,右上,右下)之一,具體取決于三角形的頂點坐標以及三角形邊界框
的頂點坐標之間關(guān)系,如下所述
if ((x0 == femin && y0 == fymin) || (xl == fxmin && yl == fymin) || (x2 ==fxmin && y2 == fymin)) start_pos = top—left;(步驟S501 、 S502 )
else if ((x0 == fxmax && y0 == fymin) || (xl == fxmax && yl == fymin) || (x2 == fxmax && y2 == fymin)) start_pos = top—right;(步驟S503 、 S504)
else if ((xO == fxmin && y0 == fymax) || (xl == fxmin && yl == fymax) || (x2 == fxmin && y2 == fymax)) start_pos = bottomjeft;(步驟S505、 S506)
else if ((xO == fxmax && y0 == fymax) || (xl == fxmax && yl == fymax) II (x2 == fxmax && y2 == fymax)) start_pos = bottom—right (步驟S507、 S508)。
圖6示出了四種情況下選擇的掃描起點的示例。圖6的(a)、 (b) 、 (c)和(d)分別示出了與圖5中的分支S502、 S504、 S506和 S508的情形。
盡管在圖5的圖示中,按照一定的順序(左上、右上、左下、右下) 來選擇遍歷起點。但是,也可以按照其他順序來選擇遍歷起點。在圖6的 圖示中,只示出了僅一個頂點與邊界框的頂點所代表的像素點重合的三角 形作為示例,但是,三角形的多個頂點與邊界框的頂點所代表的像素點重 合也是可以的。
直觀地說,裁剪前的邊界框至少有一個頂點像素與三角形的頂點重 合。如果在構(gòu)造邊界框時未經(jīng)過裁剪操作,則遍歷起點是邊界框的四個頂 點像素中與三角形的頂點重合的頂點像素之一。如果經(jīng)過了裁剪操作,則 遍歷起點是邊界框的四個頂點像素中這樣的一個像素點,該像素點與邊界 框在經(jīng)過裁剪操作之前的四個頂點中與三角形的頂點重合的頂點之一相對 應(yīng)。
遍歷起點和方向選擇模塊303還根據(jù)從邊方程計算模塊301接收到的 邊方程系數(shù)和從邊界框構(gòu)造模塊302接收到的邊界框的四個頂點(xmin,ymin)、 (xmin, ymax)、 (xmax, ymin)禾口(xmax, ymax),選擇遍歷方向。存在 兩個可能的遍歷方向水平(行)方向和垂直(列)方向。如果遍歷起點 所在的水平行內(nèi)存在三角形內(nèi)部的像素,則遍歷方向為水平方向,否則遍 歷方向為垂直方向。
通過遍歷起點相對于三角形的位置,可以判定遍歷起點所在的水平行 內(nèi)是否存在三角形內(nèi)部的像素。遍歷起點相對于三角形的位置可以通過三 角形的三個邊方程在遍歷起點處的值得到。當(dāng)一個像素位于三角形外,三 個邊方程在該像素處的值可以用來確定該像素位于三角形的左/右/上/下。
下述四個函數(shù) InLeftTriangle(x,y) 、 InRightTriangle(x,y)、 InTopTriangle(x,y)和InBottomTriangle(x, y)用于判斷像素p(x,y)和三角形之
間的位置關(guān)系
(1) InLeftTriangle(x, y)
{ if ((e0(x,y) <0 && a0 >= 0) || (el(x,y) <0 && al >= 0) || (e2(x,y) <0 && a2 >= O)) return true; else return false; }
(2) InRightTriangle(x, y)
{if ((eO(x,y) <0 && a0 <= 0) || (el(x,y) <0 && al <= 0) || (e2(x,y) <0 && a2 <= O)) return true; else return false;} (3 ) InTopTriangle (x, y)
{ if ((eO(x,y) <0 && b0 <= 0) || (el(x,y) <0 && bl <= 0) || (e2(x,y) <0 &&
b2 <= O)) return true; else return false;} (4) InBottomTriangle (x, y)
{ if ((e0(x,y) <0 && b0 >= 0) || (el(x,y) <0 && bl >= 0) || (e2(x,y) <0 && b2 >= 0)) return true; else return false;}。
圖7示出了針對不同的遍歷起點,利用上述函數(shù)根據(jù)邊界框的四個頂 點來選擇遍歷方向的流程圖。圖7中的步驟S701、 S705、 S709、 S713分別給出了遍歷起點的四種情況。在步驟S702-S704、 S706-S708、 S710-S712和S714-S716這四個分支中,針對上述四種情況進行判定,從而得到 遍歷方向。
圖8的(a)和(b)給出了利用圖7的過程得到的遍歷方向的兩個示 例。在圖8 (a)中,根據(jù)圖7中的步驟S701、 S702和S704,得到遍歷方 向為水平方向。在圖8 (b)中,根據(jù)圖7中的步驟S701-S703,得到遍歷 方向為垂直方向。
同于,圖7中對遍歷起點進行檢查來選擇遍歷方向的順序和圖8中的 圖示都僅是示例性的??梢圆捎门c圖7所示順序不同的順序,也存在與圖 8中的示例不同的三角形。
此時,準備模塊104已計算出了邊方程、遍歷起點和遍歷方向。遍歷 模塊105將根據(jù)準備模塊104準備好的信息,對三角形進行遍歷。
遍歷模塊105中的起點登記模塊304首先從準備模塊104中的遍歷起 點和方向選擇模塊303接收遍歷起點,并且將該遍歷起點登記為當(dāng)前掃描 起點。掃描模塊305接收來自起點登記模塊304的當(dāng)前掃描起點和來自準 備模塊104中的遍歷起點和方向選擇模塊303的遍歷方向,然后從該當(dāng)前 掃描起點開始,按照該遍歷方向?qū)θ切芜M行遍歷。在遍歷過程中,通過 自適應(yīng)地調(diào)整每行/列的掃描起點,從而盡可能減少訪問三角形外的像素, 提高遍歷速度。
在掃描過程中,掃描模塊305將掃描到的像素發(fā)送給繪制判定模塊 307。繪制判定模塊307判斷該像素是否在三角形內(nèi)。如果三角形的三個 邊方程在該像素點的坐標處的值均為正,則可以判斷出該點在三角形內(nèi)。 繪制判定模塊307將從掃描模塊305接收到的當(dāng)前行/列中第一個位于三角 形內(nèi)的像素點發(fā)送到下一起點計算模塊306。如果在當(dāng)前行/列中沒有找到 第一個位于三角形內(nèi)的像素點,則判定整個遍歷過程結(jié)束,并向掃描模塊 305發(fā)送遍歷結(jié)束指令。
繪制判定模塊307針對從掃描模塊305接收到的每個像素點p(x,y), 還判斷是否結(jié)束當(dāng)前行/列的掃描。如果判斷不結(jié)束當(dāng)前行/列的掃描,則 將該像素點p(x,y)發(fā)送給參數(shù)計算模塊308。如果判斷結(jié)束當(dāng)前行/列的掃描,則向掃描模塊305發(fā)送結(jié)束當(dāng)前行/列的指令。
在像素p(x,y)滿足下述條件之一時,繪制判定模塊307判斷結(jié)束當(dāng)前 行/列的掃描過程。
<formula>formula see original document page 13</formula>
下一起點計算模塊306每從繪制判定模塊307接收到一個像素點,就 計算下一行/列的掃描起點。下一行/列的掃描起點是根據(jù)三角形的邊方程 的斜率自適應(yīng)地確定的。即,通過計算當(dāng)前行/列和前一行/列中第一個三 角形內(nèi)部像素點之間的距離來得到下一個掃描行/列的起始點
圖9示出了遍歷一個三角形的完整掃描的示例,用于直觀地說明如何 選擇下一掃描起點和本發(fā)明的掃描方法。在圖9中,遍歷起點為左上角像 素點,遍歷方向為水平方向。第一掃描行的掃描起點為遍歷起點。令當(dāng)前 掃描行的第一個三角形內(nèi)像素點的坐標為(xc, yc),前一掃描行的第一個三 角形內(nèi)像素點的坐標為(xp,yp),則下一掃描行的掃描起點(xn,yn)計算方法
如下<formula>formula see original document page 13</formula>
類似地,針對相對于三角形處于不同位置的遍歷起點和不同遍歷方向 的組合,都可以根據(jù)三角形的邊方程的斜率來自適應(yīng)地選擇下一掃描行/列 的掃描起點。
圖10示出了在各種情況下計算下一個掃描行/列的掃描起點的流程圖。圖中的4個分支S1001-S1007、 S1008-S1014、 S1015-S1021和S1022-
S1027分別針對掃描起點和遍歷方向的4種不同的組合,用于計算下一行/ 列的掃描起點。
從圖可見,如果遍歷方向為水平方向,delta—x是xc和xp之間的距 離。如果xc:xp,則delta—x為0,否則delta—x等于lxc - xp|-1 。 delta—y取 決于遍歷起點在邊界框的頂行還是底行。如果遍歷起點在頂行,delta—y為 1,否則ddta—y為-l。
如果遍歷方向為垂直方向,delta_y是yc和yp之間的距離。如果 yc=yp,則delta—y為0,否則delta—y等于lyc - yp卜l 。 delta—x取決于遍歷起 點在邊界框的左邊還是右邊。如果遍歷起點在左邊,delta_x為1,否則 delta_x為-l 。
圖10中示出的4個分支的順序僅是示例性的,其他順序也是可以的。
根據(jù)上述方法,下一起點計算模塊306計算出下一掃描行/列的掃描起 點,并且發(fā)送給起點登記模塊304。起點登記模塊304將從下一起點計算 模塊306接收到的該掃描起點登記為當(dāng)前掃描起點。
當(dāng)掃描模塊305從繪制判定模塊307接收到當(dāng)前行/列結(jié)束的指令時, 從起點登記模塊304獲得前述已登記的當(dāng)前掃描起點,開始掃描下一行/ 列。
該掃描過程被一直重復(fù),直到遍歷過程結(jié)束。
參數(shù)計算模塊308針對從繪制判定模塊307接收到的每個像素點 p(x,y),根據(jù)顏色、紋理坐標等來計算參數(shù)。然后,計算出的參數(shù)與相關(guān) 像素點被發(fā)送給幀緩沖器106。
以上描述了本發(fā)明的優(yōu)選實施例。盡管在特定實施例中描述了本發(fā) 明,本發(fā)明也可以以硬件、軟件、固件或其結(jié)合的形式實現(xiàn),并可以應(yīng)用 在系統(tǒng)、子系統(tǒng)及其部件或子部件中。當(dāng)以軟件實現(xiàn)時,本發(fā)明的元件基 本上是代碼段以完成必要的任務(wù)。
1權(quán)利要求
1.一種圖形光柵掃描中的三角形遍歷方法,包括以下步驟構(gòu)造作為可以覆蓋所述三角形的最小矩形像素框的邊界框;基于所述邊界框選擇遍歷所述三角形的遍歷起點;基于所述遍歷起點與所述三角形的位置關(guān)系選擇遍歷方向;以及從所述遍歷起點沿所述遍歷方向遍歷所述三角形,其中,遍歷所述三角形的步驟包括針對所述遍歷起點和遍歷方向基于所述三角形的邊方程的斜率計算下一掃描起點的步驟。
2. 如權(quán)利要求1所述的三角形遍歷方法,其中,如果所述邊界框未經(jīng)裁剪操作,則所述遍歷起點是所述邊界框的四個 頂點像素中與所述三角形的頂點重合的頂點像素之一,如果所述邊界框經(jīng)過了裁剪操作,則所述遍歷起點是所述邊界框的四 個頂點像素中與下述頂點相對應(yīng)的頂點像素所述邊界框在經(jīng)過裁剪操作之前的四個頂點中與所述三角形的頂點重合的頂點之一。
3. 如權(quán)利要求1所述的三角形遍歷方法,其中,所述遍歷方向是從所 述遍歷起點起沿水平方向或垂直方向在所述三角形內(nèi)存在像素點的方向之
4. 如權(quán)利要求1所述的三角形遍歷方法,其中,遍歷所述三角形的步 驟還包括找到當(dāng)前行或列中沿所述遍歷方向上的第一個三角形內(nèi)像素點的 步驟。
5. 如權(quán)利要求4所述的三角形遍歷方法,其中,所述下一掃描起點是 利用當(dāng)前行和前一行中的所述第一個三角形內(nèi)像素點之間的距離或當(dāng)前列 和前一列中的第一個三角形內(nèi)像素點之間的距離計算出的。
6. 如權(quán)利要求1所述的三角形遍歷方法,遍歷所述三角形的步驟還包 括判定結(jié)束當(dāng)前行或列的步驟,在該步驟中,如果當(dāng)前行或列中前一個像 素點在所述三角形內(nèi)而當(dāng)前像素點在所述三角形外,則結(jié)束當(dāng)前行或列。
7. 如權(quán)利要求1所述的三角形遍歷方法,其中,遍歷所述三角形的步 驟還包括,如果所述遍歷方向上不存在在所述三角形內(nèi)的像素點則結(jié)束遍歷的步驟。
8. —種用于圖形光柵掃描中的三角形遍歷的設(shè)備,包括 用于構(gòu)造作為可以覆蓋所述三角形的最小矩形像素框的邊界框的裝置;用于基于所述邊界框選擇遍歷所述三角形的遍歷起點的裝置; 用于基于所述遍歷起點與所述三角形的位置關(guān)系選擇遍歷方向的裝置;以及用于從所述遍歷起點沿所述遍歷方向遍歷所述三角形的裝置, 其中,用于遍歷所述三角形的裝置包括用于針對所述遍歷起點和遍歷 方向基于所述三角形的邊方程的斜率計算下一掃描起點的裝置。
9. 如權(quán)利要求8所述的設(shè)備,其中,如果所述邊界框未經(jīng)裁剪操作,則所述遍歷起點是所述邊界框的四個 頂點像素中與所述三角形的頂點重合的頂點像素之一,如果所述邊界框經(jīng)過了裁剪操作,則所述遍歷起點是所述邊界框的四 個頂點像素中與下述頂點相對應(yīng)的頂點像素所述邊界框在經(jīng)過裁剪操作 之前的四個頂點中與所述三角形的頂點重合的頂點之一。
10. 如權(quán)利要求8所述的設(shè)備,其中,所述遍歷方向是從所述遍歷起 點起沿水平方向或垂直方向在所述三角形內(nèi)存在像素點的方向之一 。
11. 如權(quán)利要求8所述的設(shè)備,其中,用于遍歷所述三角形的裝置還 包括用于找到當(dāng)前行或列中沿所述遍歷方向上的第一個三角形內(nèi)像素點的 裝置。
12. 如權(quán)利要求11所述的設(shè)備,其中,所述下一掃描起點是利用當(dāng)前 行和前一行中的所述第一個三角形內(nèi)像素點之間的距離或當(dāng)前列和前一列 中的第一個三角形內(nèi)像素點之間的距離計算出的。
13. 如權(quán)利要求8所述的設(shè)備,其中,用于遍歷所述三角形的裝置還 包括用于判定結(jié)束當(dāng)前行或列的裝置,在該裝置中,如果當(dāng)前行或列中前 一個像素點在所述三角形內(nèi)而當(dāng)前節(jié)點在所述三角形外,則結(jié)束當(dāng)前行或 列。
14. 如權(quán)利要求8所述的設(shè)備,其中,用于遍歷所述三角形的裝置還包括用于如果所述遍歷方向上不存在在所述三角形內(nèi)的像素點則結(jié)束遍歷 的裝置。
15. —種用于圖形光柵掃描中的三角形遍歷的裝置,包括 準備模塊(104),接收所述三角形的頂點坐標,根據(jù)所述頂點坐標計算所述三角形的邊方程的系數(shù)、構(gòu)造所述三角形的邊界框、選擇遍歷起 點和遍歷方向;以及遍歷模塊(105),根據(jù)來自所述準備模塊(104)的所述邊方程的系 數(shù)、所述遍歷起點和遍歷方向,遍歷所述三角形,其中,在所述遍歷過程中,所述遍歷模塊(105)針對所述遍歷起點 和遍歷方向,基于所述三角形的邊方程的斜率計算下一掃描起點。
16. 如權(quán)利要求15所述的裝置,其中,所述準備模塊(104)包括 邊方程計算模塊(301),根據(jù)所述頂點坐標,計算所述邊方程的系數(shù);邊界框構(gòu)造模塊(302),根據(jù)所述頂點坐標,構(gòu)造作為可以覆蓋所 述三角形的最小矩形像素框的邊界框;以及遍歷起點和方向選擇模塊(303),基于所述邊界框選擇遍歷所述三 角形的遍歷起點,并且基于所述遍歷起點和所述邊方程的系數(shù)選擇遍歷方 向。
17.如權(quán)利要求16所述的裝置,其中,如果所述邊界框未經(jīng)裁剪操作,則所述遍歷起點是所述邊界框的四個 頂點像素中與所述三角形的頂點重合的頂點像素之一,如果所述邊界框經(jīng)過了裁剪操作,則所述遍歷起點是所述邊界框的四 個頂點像素中與下述頂點相對應(yīng)的頂點像素所述邊界框在經(jīng)過裁剪操作 之前的四個頂點中與所述三角形的頂點重合的頂點之一。
18. 如權(quán)利要求16所述的裝置,其中,所述遍歷方向是從所述遍歷起 點起沿水平方向或垂直方向在所述三角形內(nèi)存在像素點的方向之一 。
19. 如權(quán)利要求16所述的裝置,其中,所述遍歷模塊(105)包括起 點登記模塊(304)、掃描模塊(305)、下一起點計算模塊(306)和繪 制判定模塊(307),其中所述起點登記模塊(304)將來自所述遍歷起點和方向選擇模塊 (303)的遍歷起點和所述下一起點計算模塊(306)計算出的下一掃描起 點登記為掃描起點;所述掃描模塊(305),接收來自所述起點登記模塊(304)的掃描起點、來自所述遍歷 起點和方向選擇模塊(303)的遍歷方向、以及來自所述繪制判定模 塊(307)的當(dāng)前行或列結(jié)束指令,遍歷所述三角形,將掃描到的像素點發(fā)送給所述繪制判定模塊(307),并且 接收來自所述繪制判定模塊(307)的遍歷結(jié)束指令,結(jié)束所述遍歷5所述下一起點計算模塊(306)利用當(dāng)前行和前一行中的所述第一個 三角形內(nèi)像素點之間的距離或當(dāng)前列和前一列中的所述第一個三角形內(nèi)像 素點之間的距離計算下一掃描起點;并且 所述繪制判定模塊(307),接收來自所述邊方程計算模塊(301)的所述邊方程的系數(shù)和來 自所述掃描模塊(305)的像素點,找到當(dāng)前行或列中的第一個三角 形內(nèi)像素點并發(fā)送給所述下一起點計算模塊(306),判定是否結(jié)束當(dāng)前行或列、以及是否結(jié)束遍歷所述三角形,并且還判定是否繪制所掃描到的像素。
20. 如權(quán)利要求19所述的裝置,其中,所述繪制判定模塊(307)在 當(dāng)前行或列中前一個像素點在所述三角形內(nèi)而當(dāng)前節(jié)點在所述三角形外的 情況下判定結(jié)束當(dāng)前行或列。
21. 如權(quán)利要求19所述的裝置,其中,所述繪制判定模塊(307)在 所述遍歷方向上不存在在所述三角形內(nèi)的像素點的情況下判定結(jié)束遍歷所 述三角形。
全文摘要
本發(fā)明公開了圖形光柵掃描中的三角形遍歷方法和裝置。該方法包括構(gòu)造作為可以覆蓋所述三角形的最小矩形像素框的邊界框;基于所述邊界框選擇遍歷所述三角形的遍歷起點;基于所述遍歷起點與所述三角形的位置關(guān)系選擇遍歷方向;以及從所述遍歷起點沿所述遍歷方向遍歷所述三角形。其中,遍歷所述三角形包括針對所述遍歷起點和遍歷方向基于所述三角形的邊方程的斜率計算下一掃描起點。從而,本發(fā)明的三角形遍歷方法和裝置通過在遍歷過程中盡可能的減少訪問三角形外的像素,提高了效率。
文檔編號G09G5/36GK101661741SQ20081014677
公開日2010年3月3日 申請日期2008年8月29日 優(yōu)先權(quán)日2008年8月29日
發(fā)明者洲鐮康, 白向暉, 譚志明 申請人:富士通株式會社