專利名稱:圖形邊系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機系統(tǒng)的改進(jìn),尤其涉及處理圖形顯示上的邊信息(edge information)的系統(tǒng)及方法。
本申請的部分內(nèi)容受版權(quán)保護(hù)。版權(quán)擁有人允許作為專利申請文件的有關(guān)復(fù)制,但保留其版權(quán)。
邊信息的圖形處理是在以審美的和人機工程的方法進(jìn)行信息表達(dá)中的一個重要問題?,F(xiàn)代的圖形系統(tǒng)利用了設(shè)計用來處理各種信息(包括文本和圖形信息)的信息處理系統(tǒng),使人機工程方式進(jìn)行的信息處理變得越趨復(fù)雜。例如,程序員或用戶用一設(shè)定方法處理圖形邊信息的能力就非常有限。
先有技術(shù)軟件操作系統(tǒng)結(jié)構(gòu)的邊處理能力有限。限制之一是該操作系統(tǒng)結(jié)構(gòu)不可支持一給定外設(shè),該體系結(jié)構(gòu)沒有被先設(shè)計或無法被修改以支持該外設(shè)。還有,先有技術(shù)的體系結(jié)構(gòu)只能以單一的預(yù)定方式處理圖形邊信息。
因此,本發(fā)明的主要目的之一是在一個有存儲器和與之相連的顯示器的計算機上靈活地處理圖形目標(biāo)及其相關(guān)的邊。該目的是通過把圖形目標(biāo)裝入存儲器,又將圖形目標(biāo)轉(zhuǎn)換成多個邊目標(biāo),再把邊目標(biāo)轉(zhuǎn)換成多個掃描行象素,最后在顯示器上顯示該掃描行象素的方式實現(xiàn)的。
圖1是本發(fā)明一個最佳實施例的個人計算機系統(tǒng)框圖;圖2是一個最佳實施例的一對圖形邊示意圖3是一個最佳實施例的分類排序圖;圖4示出了一個最佳實施例的星形多邊形偶—奇規(guī)則;圖5示出了一個最佳實施例采用分枝數(shù)規(guī)則的星形多邊形;圖6示出了一個最佳實施例在偶—奇規(guī)則對中后的星形多邊形的對中框架;圖7示出了一個最佳實施例在對中的分枝數(shù)規(guī)則下的星形多邊形的對中框架;圖8示出了內(nèi)鑲偶—奇規(guī)則之下的星形多邊形的內(nèi)鑲框架;圖9示出了分枝數(shù)規(guī)則下的多邊形星的內(nèi)鑲框架;圖10示出了一個最佳實施例在外鑲偶—奇規(guī)則下的星形多邊形的外鑲框架;圖11示出了一個最佳實施例在外鑲分枝數(shù)規(guī)則下的星形多邊形的外鑲框架。
圖12示出了一個最佳實施例的分立設(shè)備所用的邊工具(edge engines);圖13示出了一個最佳實施例具有圖示結(jié)構(gòu)的區(qū)域基元;圖14示出了一個最佳實施例用于確定當(dāng)前位置狀態(tài)的方法;圖15示出了一個最佳實施例的各種邊;圖16示出了一個最佳實施例在正Y方向上的掃描轉(zhuǎn)換;
圖17示出了一個最佳實施例的直邊實例。
圖18是一個最佳實施例的邏輯流程圖。
圖19是根據(jù)本發(fā)明實施邊變換處理的實施例的流程圖;圖20是根據(jù)本發(fā)明實施。邊變換處理的實施例的流程圖;以及圖21是根據(jù)本發(fā)明提出的進(jìn)行邊變換處理的實施例的框圖。
本發(fā)明最好在具有操作系統(tǒng)的個人機(例如IBMPS/2或Apple,Macintosh計算機)上實施。圖1展示了典型的硬件環(huán)境,其中的計算機包括具有中央處理器10如一標(biāo)準(zhǔn)微處理器,固有非易失性存儲器11,以及通過總線12相連的多個其他單元。圖1所示工作站包括一個RAM14,Rom16,連接外設(shè)(如硬盤20和軟盤21)到總線的I/O適配器18,連接鍵盤24和用戶接口適配器22,鼠標(biāo)器26,喇叭28,麥克風(fēng)32,以及/或其它連到總線的用戶接口設(shè)備(例如觸摸式屏幕),連接工作站到識別數(shù)據(jù)處理網(wǎng)絡(luò)23的通訊適配器34,以及把總線與顯示設(shè)備38相連的顯示適配器36。該計算機有一常駐操作系統(tǒng)如Apple System/M。
在一最佳實施例中,是由面向目標(biāo)的編程技術(shù)用C++語言來實現(xiàn)本發(fā)明的。如本領(lǐng)域普通技術(shù)人員所知,面向目標(biāo)的編程(OOP)目標(biāo)包括數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)操作的軟件實體。這些元素一起使目標(biāo)根據(jù)數(shù)據(jù)元素所表現(xiàn)的特點以及其數(shù)據(jù)操縱功能表現(xiàn)的行為模仿任意現(xiàn)實世界的實體。以這一方式,目標(biāo)可以模仿具體事物,例如人和計算機,而且它們可以成型數(shù)字或幾何概念一類的抽象概念。目標(biāo)技術(shù)的好處在于三個基本原理封裝,多形性,以及繼承性。
目標(biāo)隱藏(或封裝)其數(shù)據(jù)和算法(其功能通過算法而進(jìn)行工作)的內(nèi)部結(jié)構(gòu),不用展示這些實施細(xì)節(jié),目標(biāo)展示能清楚表現(xiàn)其抽象而無其他細(xì)節(jié)信息的接口。多形性使封裝又進(jìn)一步。其概念是多個形狀、一個接口。一個軟件部件可向另一部件發(fā)出命令而無需知曉該部件到底是什么。接收命令的部件對其進(jìn)行解釋且根據(jù)其變量和數(shù)據(jù)決定如何執(zhí)行該命令。第三個原理是繼承,它允許開發(fā)者再使用它已有的設(shè)計和編碼。這一能力使開發(fā)者避免開發(fā)軟件時一切都需從頭開始。反之,通過繼承,開發(fā)者開發(fā)出繼承了行為的子類別,從而開發(fā)者可以滿足其客戶特定需求。
先有技術(shù)把目標(biāo)和類別庫在過程環(huán)境中分層。市場上許多應(yīng)用結(jié)構(gòu)采用了這一設(shè)計方式。其中,在單一操作系統(tǒng)的上面有至少一個或多個目標(biāo)層,雖然這一方式在目標(biāo)層級中利用了封裝,多形性,和繼承性的原理,而且確實較之過程編程技術(shù)有了長足的改進(jìn),但仍有局限性。其困難在于雖然實際上開發(fā)者易于重新使用自己的目標(biāo),但卻難于使用其它系統(tǒng)的目標(biāo),開發(fā)者仍需調(diào)用過程操作系統(tǒng)進(jìn)入低級非目標(biāo)層級。
面向目標(biāo)編程的另一方面是接近于應(yīng)用開發(fā)的結(jié)構(gòu)過程(framework,是指一組提供預(yù)制結(jié)構(gòu)以解決一組相關(guān)問題的關(guān)聯(lián)類別)。對結(jié)構(gòu)最合理的定義之一由伊利諾斯大學(xué)(U-niversity of Illinois)的Ralph E.Johnson和普度(Purdue)大學(xué)的Vincent F.Russo于1991年在“Reusing Object-OrientedDesigns”一書中作出的。依利諾依斯大學(xué)技術(shù)報告UIUCD-CS91-1696中提出的“一個抽象類別是一組目標(biāo)的設(shè)計,這些目標(biāo)合作以推行一組響應(yīng)性,因此,結(jié)構(gòu)就是一組能合作以執(zhí)行特定的一組計算響應(yīng)性的一組目標(biāo)類別”。從編程角度出發(fā),結(jié)構(gòu)實際上是幾組提供一個工作應(yīng)用程序的預(yù)制結(jié)構(gòu)的內(nèi)聯(lián)目標(biāo)類別。例如,一個用戶接口結(jié)構(gòu)可提供繪制窗,滾動條,選項屏等的支持和“系統(tǒng)預(yù)置”行為。由于結(jié)構(gòu)基于目標(biāo)技術(shù),這一行為可為繼承并取代,以便允許開發(fā)者擴展該結(jié)構(gòu)并生成客戶化的特定專業(yè)領(lǐng)域中的解決方法。程序員不用改變原編碼而只是擴展軟件,這是優(yōu)于常規(guī)編程的一個要點。此外,開發(fā)者不是通過編碼層級盲目進(jìn)行工作,因為結(jié)構(gòu)提供了體系結(jié)構(gòu)指南及模型,并在同時使其不必提供針對問題范疇的唯一特定行為。
從商業(yè)角度來看,結(jié)構(gòu)可以看成封裝或?qū)嵤┮惶囟▽I(yè)領(lǐng)域中的專門知識的一種方式。公司開發(fā)機構(gòu)、獨立的軟件銷售商(ISV)及系統(tǒng)集成商都已獲得了特定領(lǐng)域的專門知識,例如制造,財會以及前面實例中的現(xiàn)金交易等。該專門知識被收錄于其編碼之中。結(jié)構(gòu)允許這些機構(gòu)去尋找和組裝該專門知識的共同特性,作法是將專門知識收錄在機構(gòu)的編碼中。首先,這使開發(fā)者可以生成或擴展一個利用該專門知識的應(yīng)用程序,然后問題被解決一次而且商業(yè)定律和設(shè)計也得以前后一致地實施和使用。另外,結(jié)構(gòu)和在結(jié)構(gòu)之后所實現(xiàn)的專門知識對已經(jīng)獲取了市場統(tǒng)管和銷售全過程知識(例如制造,會計或生物技術(shù)的包裝,再銷售,以及應(yīng)用,進(jìn)而實行技術(shù)開發(fā)及普及)的那些機構(gòu)工具有戰(zhàn)略性的重要意義。
歷史上,結(jié)構(gòu)只是在最近才成為個人計算機的主導(dǎo)思想。這一進(jìn)展得利于面向目標(biāo)語言的出現(xiàn),例如C++。傳統(tǒng)上,C++大多運用在UNIX系統(tǒng)上以及研究人員的工作站上,而不是在商業(yè)個人計算機上。正是象C++及其它面向目標(biāo)的語言(例如Smalltalk和其它)使得許多大學(xué)和研究項目能夠設(shè)計出今天商用結(jié)構(gòu)和分類庫的先驅(qū)。其中的例子包括斯坦福大學(xué)(Stanford University)的InterView,卡內(nèi)基-麥倫大學(xué)(Camegie-Mellon University)的Andrew工具箱以及蘇黎世大學(xué)(University of Zurich)的ET++結(jié)構(gòu)。
根據(jù)系統(tǒng)級以及要解決的問題的性質(zhì)能產(chǎn)生出許多種結(jié)構(gòu)。結(jié)構(gòu)的類型范圍包括從輔助開發(fā)用戶接口的應(yīng)用程序結(jié)構(gòu)到提供通訊、打印,文件系統(tǒng)支持,圖形之類的基本系統(tǒng)軟件服務(wù)的低級結(jié)構(gòu)。應(yīng)用程序結(jié)構(gòu)的商用例子是MacApp(Apple),Bedrock(Symantec),OWL(Borland),NeXTStep AppKit(NeXT)以及Smalltalk-80 MVC(ParcPlace)等等。
用結(jié)構(gòu)進(jìn)行編程要求習(xí)慣其它系統(tǒng)的開發(fā)者采用新的思維方式。事實上,它與常規(guī)的“編程”概念完全不同。在以前的操作系統(tǒng)(例如DOS和UNIX)中,開發(fā)者自己的程序提供了所有結(jié)構(gòu)。操作系統(tǒng)通過系統(tǒng)調(diào)用提供服務(wù)。開發(fā)者的程序在需要服務(wù)時進(jìn)行調(diào)用并在得到服務(wù)后控制返回。程序結(jié)構(gòu)基于控制流程,它在開發(fā)者所編寫的編碼中得以實現(xiàn)。
而當(dāng)采用結(jié)構(gòu)時,該過程成為逆向。開發(fā)者不再負(fù)責(zé)流程控制。開發(fā)者必須放棄根據(jù)執(zhí)行的流程來理解編程任務(wù)這一思維方式,而根據(jù)目標(biāo)的響應(yīng)進(jìn)行思考,因為目標(biāo)的響應(yīng)必須根據(jù)結(jié)構(gòu)來決定何時執(zhí)行任務(wù)。開發(fā)者編寫的的例行程序由不是開發(fā)者寫的編碼所驅(qū)動,開發(fā)者甚至從未見過這些編碼??刂屏鞒痰霓D(zhuǎn)換對只對過程編程有經(jīng)驗的開發(fā)者而言可能是較大的精神障礙。然而,一旦這一技術(shù)被理解,結(jié)構(gòu)編程比其他編程所需做的工作將大為減少。
應(yīng)用結(jié)構(gòu)為開發(fā)者提供預(yù)定功能性。系統(tǒng)結(jié)構(gòu)(例如包括在最佳實施例中的那些)具有概念,它提供系統(tǒng)級服務(wù),諸如系統(tǒng)程序員這樣的開發(fā)者用這種系統(tǒng)級的服務(wù)進(jìn)行子分類/置換以生成定制的方案。例如,一個可以提供用來支持新的及多用途的設(shè)備(例如聲頻,視頻,MIDI,動畫等等)的基礎(chǔ)程序的多媒體結(jié)構(gòu)。需要支持新型設(shè)備的開發(fā)者必須寫一個設(shè)備驅(qū)動程序,如果用結(jié)構(gòu)來完成此任務(wù),開發(fā)者只需提供該新設(shè)備的具體特征以及行為特性。
在這種情況下,開發(fā)者只實施將被多媒體結(jié)構(gòu)調(diào)用的某一成員功能。開發(fā)者所獲得的直接好處是用于每類設(shè)備的通用碼已由多媒體結(jié)構(gòu)提供了。這意味著開發(fā)者所要編寫、測試及調(diào)度的設(shè)備驅(qū)動程序碼要少許多。使用系統(tǒng)結(jié)構(gòu)的另一例子是對小計算機系統(tǒng)接口(SCSI)設(shè)備,NuBus卡及圖形設(shè)備有不同的I/O結(jié)構(gòu)。由于具有繼承的功能性,每個結(jié)構(gòu)為其設(shè)備類別中發(fā)現(xiàn)的通用功能性提供支持。其他開發(fā)者則可以依據(jù)這些對所有設(shè)備保持一致的接口。
一個最佳實施例采用了結(jié)構(gòu)的概念并將其應(yīng)用于整個系統(tǒng)。對于商用或公司開發(fā)者、系統(tǒng)集成商、或者原設(shè)備制造商(OEM)而言,這意味著如MacApp這類的結(jié)構(gòu)的所有已示優(yōu)點不僅可以影響應(yīng)用層級(例如文本和用戶接口),還可影響系統(tǒng)層級(例如圖形,多媒體,文檔系統(tǒng),I/O,測試等等)。
在一個最佳實施例的體系結(jié)構(gòu)中生成的應(yīng)用程序?qū)嶋H上類似于編寫拚裝到結(jié)構(gòu)協(xié)約上的特定域的謎塊。以此方式,編程的整個概念改變了。不用逐行編寫能調(diào)用多個API層的編碼,軟件的開發(fā)采用的是在該環(huán)境中從先有結(jié)構(gòu)中衍生類別,然后根據(jù)要求加入新行為和/或置換繼承的行為的方式。
如此,開發(fā)者的應(yīng)用程序就變成為由所有其它結(jié)構(gòu)應(yīng)用程序編寫和共享的編碼集。這是一個強有力的概念,因為開發(fā)者們將在工作中建立互相依賴的關(guān)系。這也使開發(fā)者能夠靈活地按照需求的最小量進(jìn)行客戶化。某些結(jié)構(gòu)將如其原樣使用。在某些情況下,客戶化量最少,所以開發(fā)者安裝的謎塊也最小。在其它情況下,開發(fā)者也可能進(jìn)行擴展修改并生成全新的東西。在一最佳實施例中,如圖1所示,位于RAM14中并由CPU10控制的程序負(fù)責(zé)用面向目標(biāo)的圖形結(jié)構(gòu)執(zhí)行各種任務(wù)。
一個最佳實施的利用再現(xiàn)(rendening,在3-D圖形中,指把一個模型從一個給定攝象位置變換到一個基于屏幕的視圖的處理)流水線的邊工具來操縱一個TGrafEdges表。它只被分立設(shè)備運用。例如,在TFrameBuffer設(shè)備中,邊工具利用表示一個基元被填充和成框架部分的邊來生成掃描行間距。這一處理稱為掃描轉(zhuǎn)換。
TGrafEdge是一多形掃描轉(zhuǎn)換基元(Primitive,在Taligent操作環(huán)境圖形系統(tǒng)中,指的是一個基本圖形目標(biāo))。圖2展示了一對圖形邊。每個圖形邊230、240有一最小值Y為210,起始值X為200,高度值220,以及虛擬Step方法。Step方法為下一掃描行(下一整數(shù)Y值)更新X值。TGrafEdge因此可表現(xiàn)只在Y方向單調(diào)的任何曲線,即,它對每個間隔的掃描行都設(shè)有單一的X值。TGrafEdge還對于單一CAG節(jié)點目標(biāo)進(jìn)行引用,用于確定出一個點位于整個幾何形狀之內(nèi)還是之外。
一個簡單的基元易于再現(xiàn),它有單一的輪詢計數(shù),用于確定一個點在幾何形狀之內(nèi)或之外。而TGArea基元則可任意復(fù)雜。每個子基元都有自己的輪詢計數(shù)。所有子基元的輪詢計數(shù)可用于計算整個基元的狀態(tài)。進(jìn)行內(nèi)/外計算的結(jié)構(gòu)由TGArea建立并轉(zhuǎn)至邊工具。但是,與更復(fù)雜的內(nèi)/外計算有關(guān)的開銷應(yīng)該只由TGArea基元引起。邊工具的子類別將提供去階梯掃描轉(zhuǎn)換,而且可為強速邊(例如直線邊)生成。
象素完善性對邊工具很重要,因為邊工具進(jìn)行掃描轉(zhuǎn)換以分離設(shè)備單元。假定有一組限定設(shè)備空間中的一個區(qū)域的邊,象素完善性就會決定哪些象素要修改。即使“象素”一個詞引用于此,象素完善性仍可用于其它分立設(shè)備,因為它定義了坐標(biāo)系統(tǒng)上分離設(shè)備所在的位置。
掃描轉(zhuǎn)換是把一個幾何形狀轉(zhuǎn)換成水平掃描行距的一個過程,爾后這些掃描行被繪制在分立的圖形設(shè)備上。一個幾何形狀可被填充或鑲框或二者兼為之。繪制被填充和/或被鑲框的幾何形狀的算法要保證沒有重復(fù)繪制,從而允許形狀變換并對函數(shù)是正確透明的。邊工具填充由表示其外形輪廓的TGrafEdges表定義的一個幾何形狀。用戶可以通過在任一選擇方向追蹤某一幾何形狀的參數(shù)而確定其輪廓。這便確定了表中每個邊的符號。邊符號指向正Y方向,則為正。在輸出上無效的邊被取消。
圖3示出了一個最佳實施例的排序。邊先根據(jù)其較小的Y值被排序,然后又按照在一特定Y值內(nèi)的X值排序。每個與邊相交的掃描行生成的X方向的間距至少有一個。通過總是保持有一個邊(即穿過當(dāng)前掃描行的邊)“有效”的表即可完成這一任務(wù)。每個掃描行都有有效邊表。然后,當(dāng)邊被穿過時,下列規(guī)則之一被用于生成該掃描行的適當(dāng)間距。這些規(guī)則是偶-奇規(guī)則或分枝數(shù)規(guī)則。
偶-奇規(guī)則每次遇到邊時,開始或結(jié)束一個間距。圖4示出了根據(jù)本發(fā)明的一個最佳實施例為每對邊生成的星形間距。
分枝數(shù)規(guī)則當(dāng)遇到邊時,邊的符號被加在始設(shè)為零的分枝數(shù)上。當(dāng)分枝數(shù)不再為零時,就產(chǎn)生了間距。當(dāng)分枝數(shù)為零時,間距結(jié)束。這便能填滿一個多邊形的外邊界內(nèi)所有區(qū)域。圖5示出了采用一個最佳實施例的分枝數(shù)規(guī)則的星形多邊形。
所采用的規(guī)則取決于被再現(xiàn)的基元。例如定義一個多邊形圖形目標(biāo)的TGPolygon基元就包含了指定使用某個規(guī)則的參數(shù)。TGEllipse基元可使用任一規(guī)則,因為兩種規(guī)則用于一個非自相交幾何圖形時所產(chǎn)生的結(jié)果相同。圍繞一個目標(biāo)可繪制兩種框架,這取決于框架的目的細(xì)線框架和粗框架。以下將對它們進(jìn)行討論。
粗框架的粗細(xì)可任意選定。末端蓋(end caps)、連接方式(joint styles)以及陰影(dashing)均可按需使用。邊工具掃描同時進(jìn)行粗框及填充轉(zhuǎn)換。表示框架兩側(cè)(左和右側(cè))的TGafEdge被生成并填入有填充邊的表中。框架邊的方向以及符號與生成框架邊的填充邊的方向及符號一致。當(dāng)該基元被掃描轉(zhuǎn)換時,保持兩個分枝數(shù)一個用于左框架邊而一個用于右框架邊??蚣苌傻拈g距取決于使采用的填充規(guī)則。
偶-奇規(guī)則遇到一個框架邊時,其符號被加至適當(dāng)?shù)姆种?shù)(左或右)上。當(dāng)兩個分枝數(shù)不等時,一個間距就產(chǎn)生了。當(dāng)它們相等時,間距結(jié)束。
分枝數(shù)規(guī)則遇到一個框架邊時,其符號被加至適當(dāng)?shù)姆种?shù)(左或右)。當(dāng)兩個分枝數(shù)的符號不等時,間距產(chǎn)生,而當(dāng)符號相等時則間距結(jié)束。
根據(jù)所用之筆平衡,框架可在填充區(qū)域重疊。但是,由于填充區(qū)域和框架一起繪制,所以沒有一個區(qū)域會被重復(fù)繪制。
對于對中筆而言,框架之粗細(xì)是以填充區(qū)的輪廓為中心的。通過使框架生成的間距取代填充所產(chǎn)生的間距即可實現(xiàn)這一要求。
圖6示出了一個最佳實施例中在對中偶-奇規(guī)則下的一個星形多邊形的對中框架,而圖7示出了一個最佳實施例中在對中分枝數(shù)規(guī)則之下的一個星形多邊形的對中框架。如果是內(nèi)鑲筆,框架的粗細(xì)就完全在填充區(qū)輪廓之內(nèi)。為框架生成的間距取代了為填充生成的間距,但它們只在有填充間距生成時才會被繪制。換言之,該框架被鉗制在填充幾何形狀內(nèi)。這與外鑲框架相反。圖8示出了根據(jù)本發(fā)明的一個最佳實施例在內(nèi)鑲偶-奇規(guī)則下的星形多邊形的內(nèi)鑲框架。圖9則示出了在分枝數(shù)規(guī)則之下的星形多邊形的內(nèi)鑲框架。
對于外鑲筆而言,框架之粗細(xì)完全在填充區(qū)輪廓之外。為框架生成的間距只是在沒有填充間距被繪制時才被繪制。換言之,框架從不在填充幾何形狀之內(nèi)被繪制。這與內(nèi)鑲框架相反。圖10示出了一個最佳實施例中在外鑲偶-奇規(guī)則下的星形多邊形的外鑲框架。圖11則示出了一個最佳實施例中的外鑲分枝數(shù)規(guī)則之下的星形多邊形的外鑲框架。
邊工具階梯效應(yīng)子類別圖12展示了分立設(shè)備所運用的邊工具,但未示出去階梯效應(yīng)邊工具。TEdgeEngine是所有邊工具由之衍生的抽象類別。它包括接受TGrafEdges的一個純虛擬功能。它還包括一個純虛擬Render功能。
TFillEdge Engine完成TGrafEdges表所敘述的幾何形狀的階梯填充。該邊可為任意類型。
TRectiLinearFillEdgeEngine執(zhí)行線性TGrafEdges表所敘述的幾何形狀的階梯填充。它是TFillEdgeEngine的優(yōu)化程序,并假設(shè)每個TGrafEdge都是一條垂直線。
FillAndFrameEdgeEngine執(zhí)行TGrafEdges表所敘述的幾何形狀的階梯填充和框架成形。該邊可為任意形狀。
TRectilinearFillAndFrameEdgeEngine執(zhí)行線性TGrafEdges表所敘述的幾何形狀的階梯填充和框架成形。它是TFillEdgeEngine的優(yōu)化程序并假設(shè)每個TGrafEdge都為一垂直線。
邊工具去階梯效應(yīng)子類別將一邊工具進(jìn)行子分類的另一原因是要容納去階梯效應(yīng)。有效地實施共享通用優(yōu)化以便在過濾核心程序(filterKernel)邊周圍的區(qū)域進(jìn)行卷積。這一優(yōu)化不僅避免了形狀內(nèi)部的大量過濾操作,而且允許使用比如PaintSpans之類的簡單非合成TSpanPainter方法。一個去階梯效應(yīng)邊工具可經(jīng)兩個途徑對邊進(jìn)行卷積。
高級取樣方式掃描以較高分辯率進(jìn)行掃描,又再現(xiàn)成為子象素位映象,這些子象素位映象在一個子象素層級表示細(xì)節(jié)。相反,子象素掃描轉(zhuǎn)換可被預(yù)先計算形成表格,進(jìn)入和退出坐標(biāo)邊的小數(shù)部分中的一些有效位可使該表被索引。這些位映象是典型的4×8象素。若使用一個箱式濾波器(box fil-ter),則所需的只是位映象的位總數(shù)。若用一高質(zhì)量濾波器(其支持的尺寸大于0.5),則每個輸出象素的透明度由其本身及相鄰位映象的加數(shù)均值所確定。
高質(zhì)量濾波器產(chǎn)生另一問題。掃描行只有在其提供的所有子象素位映象都已由過濾核心程序卷積并求和之后才輸出。這意味著邊工具將在其掃描轉(zhuǎn)換之后將間距輸出運用到兩個掃描行。這些方式通常運用于極點是整數(shù)或有必要求解隱藏表面積的時候。預(yù)濾波方式在包括一個邊的每個象素處使用精確的面積計算。聽起來這好象很昂貴,但實際上它具有一個有效的增值分解。對于在一掃描行上的一對給定邊,可以有多至三個相交區(qū)域左邊,中間或完全復(fù)蓋的象素,以及右邊。與一邊相交的所有象素的面積必須被計算。若一個通用邊與幾個相鄰的象素相交,則相連相交的象素的面積可由計算機遞增計算。對于有給定斜率的邊,從一個象素到下一個象素的面積差是恒定的?;谶@一假設(shè)的方式更為有趣。
無論何種算法被采用,總可遇到兩條邊的情況。獨立的邊是第一種情況,這種情況極為普遍。所有工具都將遇到這一情況。所有來自只有框架或只有填充的邊工具的邊均落入這一范疇。一個Framing和Filling邊工具將在框架的外邊遇到這一情況。在確定了邊的不透明度之后,透明的象素必須由用TSpanPainter的CompositeSpan方法的目的象素合成。內(nèi)部不透明間距可通過TSpanPainter的PaintSpans或PainBlock方法設(shè)置。
第二種情況是由不同顏料填充的兩個相鄰邊。這種情況只出現(xiàn)在填充和成框架之時??蚣芎吞畛渲g的內(nèi)部接口必須小心合成。沿該接口不提供背景色給象素的最終值。該工具必須調(diào)用一個邊的TSpanPainter GetDesiredColorAt方法,以確定使用者在該象素處所想要的色彩。一旦找到了該色彩,邊工具必須調(diào)用其他TSpanPainter的SetAbut-tingEdgeColor以及PaintAbuttingEdgePixel方法以獲取正確的合成結(jié)果。GetDesiredColorAt以及SetAboutingEdgeColor的每個象素的花費可以避免,如果TSpanPainter的IsShadingCon-stant方法返回TRUE的話。
CAG目標(biāo)以下展示CAG目標(biāo)及其在掃描轉(zhuǎn)換中運用的實例。圖13是一個最佳實施例中展示結(jié)構(gòu)的區(qū)域基元。該區(qū)域由三個不同的幾何形狀組成一個長方形,一個橢園形和一個多邊形。每一個幾何形狀都與一操作相關(guān)。當(dāng)進(jìn)行掃描轉(zhuǎn)換時,邊工具必須有一方法來確定在該幾何形狀內(nèi)(內(nèi)或外)的當(dāng)前位置狀態(tài)。圖14示出了一個最佳實施例中確定當(dāng)前位置狀態(tài)的方法。
有八條描述該區(qū)域的邊兩個用于長方形,兩個用于橢圓,而四個用于多邊形。它們指向其“母(parent)”,一個在邊狀態(tài)改變時得到通知的TCAGNode目標(biāo)。當(dāng)邊工具遇到一個邊時,該邊把邊符號傳遞出去將該變換通知其母節(jié)點。該節(jié)點就利用邊符號來確定邊所屬目標(biāo)的狀態(tài)(位于其中或其外)。若狀態(tài)改變,則節(jié)點通知其母節(jié)點。該循環(huán)持續(xù)直到不再有變化發(fā)生,或達(dá)到根節(jié)點。這一處理是在掃描轉(zhuǎn)換時維護(hù)區(qū)域當(dāng)前狀態(tài)的快速有效方法,邊工具向根節(jié)點查詢區(qū)域當(dāng)前狀態(tài)并因此而產(chǎn)生掃描行距。
要從幾何圖形生成邊,采用了以下步驟。首先必須標(biāo)識Y向單調(diào)邊。由于水平邊在Y方向掃描轉(zhuǎn)換時無結(jié)果,所以將其除去。對每個邊,用下列值將適當(dāng)類型的邊目標(biāo)初始化。X在邊頂部的X值;Y在邊頂部的Y值;最終Y在邊底部的Y值;以及符號若邊向下則為+1,向上則為-1。
圖15示出了一個最佳實施例中的各種邊。1500示出了一長方形,1510示出了兩條垂直邊,1520示出了旋轉(zhuǎn)長方形(多邊形),1530示出了四條直邊,1540示出了橢圓形,1550示出了兩條橢圓邊,1560示出了一條封閉曲線回路,而1570示出了四條取樣邊。
圖16示出了一個最佳實施例中在Y方向上的掃描轉(zhuǎn)換,轉(zhuǎn)換一次只發(fā)生一個掃描行,并要求每一邊都只在Y方向上是單調(diào)的。
圖17示出了一個最佳實施例中的直邊例子。矢量是步進(jìn)函數(shù);f(x)=y(tǒng)+斜率,這里,斜率=0.5。該直邊的符號為+1。
所有邊的抽象主類別具有下列數(shù)據(jù)結(jié)構(gòu)X(實數(shù))——當(dāng)前X值;Y(整數(shù))——當(dāng)前Y值;最終Y(整數(shù))——邊底部的Y值;符號(整數(shù))——+1或-1,取決于邊在Y上的方向;步進(jìn)函數(shù)——被調(diào)用以進(jìn)行X下一行掃描;以及轉(zhuǎn)換函數(shù)——在掃描轉(zhuǎn)換期間邊相交時調(diào)用。
從所有邊的抽象主類別可以衍生下述子類別
直邊,垂直邊,橢圓邊,以及取樣邊。
直邊——為一直線段的邊,包括X(實數(shù))——當(dāng)前X值;Y(整數(shù))——當(dāng)前Y值;最終Y(整數(shù))——在邊的底部的Y值;符號(整數(shù))——+1或-1取決于邊在Y上的方向,以及步進(jìn)函數(shù)——加線之斜率于當(dāng)前X值中。
垂直邊——一條垂直邊段的邊,包括X(實數(shù))——當(dāng)前X值;Y(整數(shù))——當(dāng)前Y值;最終Y(整數(shù))——在邊的底部的Y值;符號(整數(shù))——+1或-1由邊在Y的方向所決定,以及步進(jìn)函數(shù)——由于垂直線段的X值為常量,所以不起作用。
橢園形邊——一條垂直線段的邊,包括X(實數(shù))——當(dāng)前X值;Y(整數(shù))——當(dāng)前Y值;最終Y(整數(shù))——在邊的底部的Y值;符號(整數(shù))——+1或-1,取決于邊在Y上的去向,以及步進(jìn)函數(shù)——根據(jù)bresenham橢圓算法計算在橢圓邊界上的下一X值。
取樣邊——它是一段直線的序列,包括X(實數(shù))——當(dāng)前X值;Y(整數(shù))——當(dāng)前Y值;最終Y(整數(shù))——右邊底部的Y值;符號(整數(shù))——+1或-1,取決于邊在Y上的朝向,以及步進(jìn)函數(shù)——通過把當(dāng)前線段的斜率加到當(dāng)前X值或在當(dāng)前線段結(jié)束時跳到下一線段而計算下一值。
圖18為一個最佳實施例中的邏輯流程圖,處理從功能框1800開始從一給定幾何形狀生成邊,幾何形狀包括長方形,橢圓和多邊形。然后,在功能框1810處對邊進(jìn)行排序分類,沿Y值增大方向為主分類區(qū)而沿X增值方向作為第二分類區(qū)。其次,將當(dāng)前掃描行初始化為在功能框第一邊的Y值,在功能框1830處把新的邊收集組成一個有效邊表(與當(dāng)前掃描行相交的那些邊的表)。在功能框1840處去除那些不再與當(dāng)前掃描行相交的邊。然后在功能框1850處調(diào)用步進(jìn)函數(shù),以確定在所有有效邊中是否有任何邊異常(邊的步進(jìn)函數(shù)計算相應(yīng)于當(dāng)前掃描行的下一X值)。進(jìn)而在判別框1860處進(jìn)行測試以確定是否有必要沿X方向?qū)呥M(jìn)行分類排序。若有新邊加入而以前的邊被去除或邊已相交,則須進(jìn)行X方向的分類排序。若其必要,則在功能框1870處沿X增值方向進(jìn)行有效邊排序分類,然后控制去往功能框1880。若排序分類不必要,則控制直接去往功能框1880。
在功能框1880中,對每條邊進(jìn)行測試以確定邊的相交是否會導(dǎo)致幾何形狀外的變換以及在當(dāng)前掃描行上繪制象素的變換。邊轉(zhuǎn)換函數(shù)可用于歸納進(jìn)行內(nèi)/外檢測的方法。該邏輯的其它討論示于解釋該處理各種實施例的圖19,10和21中。然后,在判別框1890中,進(jìn)行測試以確定是否已處理了所有邊。若是,則處理結(jié)束于終點1891。若否,則在功能框1892處對當(dāng)前掃描行增值然后控制去往功能框1830進(jìn)一步進(jìn)行上述邏輯處理。
分枝數(shù)規(guī)則圖19是根據(jù)圖18的功能框1880提出的發(fā)明要點的邊轉(zhuǎn)換處理的一個實施例的流程圖。處理始于功能框1990,在該處,邊的符號被加至當(dāng)前輪詢計數(shù)并在判別框1910處進(jìn)行測試以確定是否該輪詢計數(shù)已為零。若是,則在當(dāng)前掃描行上從保存的X值到邊的X值繪制象素(如功能框1940所示)。若否,則在判別框1920處確定輪詢計數(shù)是否非零。若是,則在框1930處保存邊的X值。
偶-奇規(guī)則圖20是根據(jù)圖18的功能框1880提出的發(fā)明要點的邊轉(zhuǎn)變處理的一個實施例的流程圖。處理始于功能框2000,邊的符號被加至當(dāng)前輪詢計數(shù)并在框2010處進(jìn)行測試以確定是否輪詢計數(shù)為偶數(shù)。若是,則在功能框2030處從保存的X值到邊的X值在當(dāng)前掃描行上繪制象素。若為奇,則在功能框2020處保存有邊的X值。
圖21是根據(jù)本發(fā)明的邊轉(zhuǎn)換處理的實施例框圖。該圖把一個長方形和一個橢圓結(jié)合在一起以展示轉(zhuǎn)換處理。其合成值存于框2100中。合成目標(biāo)2110用了兩個偶-奇值并計算兩個值的邏輯合成。偶-奇目標(biāo)2120用偶-奇邏輯追蹤每個幾何圖形的內(nèi)外狀態(tài)。遇到邊時,通過框2130調(diào)用其轉(zhuǎn)變函數(shù)。2140示出了長方形和橢圓的邊。
權(quán)利要求
1.一種在具有存儲器和顯示器的計算機上處理圖形目標(biāo)的方法,其特征在于包括以下步驟(a)將一個圖形目標(biāo)裝入存儲器;(b)將該圖形目標(biāo)轉(zhuǎn)換成多個邊目標(biāo);(c)把邊目標(biāo)轉(zhuǎn)換成多個掃描行象素;以及(d)在顯示器上顯示掃描行象素和圖形目標(biāo)。
2.權(quán)利要求1所述方法,包括多形地表示邊目標(biāo)的步驟。
3.權(quán)利要求2所述方法,包括以一可擴展方式表示邊目標(biāo)的步驟。
4.權(quán)利要求1所述方法,包括以一可擴展方式確定掃描行象素位于圖形目標(biāo)之內(nèi)或之外的步驟。
5.權(quán)利要求4所述方法,包括利用偶-奇處理對邊目標(biāo)進(jìn)行處理的步驟。
6.權(quán)利要求4所述方法,包括用分枝數(shù)處理對邊目標(biāo)進(jìn)行處理的步驟。
7.權(quán)利要求4所述方法,包括對任何圖形目標(biāo)的邊進(jìn)行處理的步驟。
8.權(quán)利要求1所述方法,包括用面向目標(biāo)的處理對目標(biāo)進(jìn)行處理的步驟。
9.處理圖形目標(biāo)的裝置,其特征在于包括(a)一個計算機;(b)位于計算機中的存儲器;(c)與計算機相連的顯示器;(d)把圖形目標(biāo)裝入存儲器的方法;(e)把圖形目標(biāo)轉(zhuǎn)換成多個邊目標(biāo)的方法;(f)把邊目標(biāo)轉(zhuǎn)換成多個掃描行象素;以及(g)在顯示器上顯示掃描行象素和圖形目標(biāo)的方法。
10.權(quán)利要求9所述裝置,包括多形地表示邊目標(biāo)的方法。
11.權(quán)利要求10所述裝置,包括以一可擴展方式表示邊目標(biāo)的裝置。
12.權(quán)利要求9所述裝置,包括以一可擴展方式確定掃描行象素位于圖形目標(biāo)之內(nèi)或之外的裝置。
13.權(quán)利要求12所述裝置,包括利用偶-奇處理對邊目標(biāo)進(jìn)行處理的裝置。
14.權(quán)利要求12所述裝置,包括用分枝數(shù)處理時邊目標(biāo)進(jìn)行處理的裝置。
15.權(quán)利要求12所述裝置,包括對任何圖形目標(biāo)的邊進(jìn)行處理的裝置。
16.權(quán)利要求9所述裝置,包括用面向目標(biāo)的處理對邊目標(biāo)進(jìn)行處理的裝置。
17.權(quán)利要求1所述方法,包括以一擴展方式把邊目標(biāo)轉(zhuǎn)換成象素的步驟。
18.權(quán)利要求1所述方法,包括用剪切算法把邊目標(biāo)從頂部轉(zhuǎn)換到底部的步驟。
19.權(quán)利要求1所述裝置,包括以一可擴展方式把邊目標(biāo)轉(zhuǎn)換成象素的裝置。
20.權(quán)利要求1所述裝置,包括有剪切算法把邊目標(biāo)從頂部轉(zhuǎn)換到底部的裝置。
21.用于在具有存儲器和顯示器的計算機上處理圖形目標(biāo)的方法,其特征在于包括以下步驟。(a)把一個圖形目標(biāo)裝入存儲器;(b)把該圖形目標(biāo)轉(zhuǎn)換成多個邊目標(biāo);(c)把邊目標(biāo)轉(zhuǎn)換成多個掃描行象素;(d)將掃描行象素進(jìn)行去階梯效應(yīng)處理;以及(e)在顯示器上顯示掃描行象素和圖形目標(biāo)。
全文摘要
通過把圖形目標(biāo)裝入存儲器并將其轉(zhuǎn)換成多個邊目標(biāo),進(jìn)而把邊目標(biāo)轉(zhuǎn)換成多個掃描行象素,然后在顯示器上顯示掃描行象素和圖形目標(biāo)的計算機圖形目標(biāo)處理方法和系統(tǒng)。
文檔編號G06T15/50GK1113666SQ94190617
公開日1995年12月20日 申請日期1994年1月3日 優(yōu)先權(quán)日1993年6月30日
發(fā)明者理查德·D·韋伯, 阿瑟·W·卡貝拉爾 申請人:塔里根特公司