DE69312505T2 - Polygonaufrasterung - Google Patents

Polygonaufrasterung

Info

Publication number
DE69312505T2
DE69312505T2 DE69312505T DE69312505T DE69312505T2 DE 69312505 T2 DE69312505 T2 DE 69312505T2 DE 69312505 T DE69312505 T DE 69312505T DE 69312505 T DE69312505 T DE 69312505T DE 69312505 T2 DE69312505 T2 DE 69312505T2
Authority
DE
Germany
Prior art keywords
pixel
edge
triangle
span
pixels
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69312505T
Other languages
English (en)
Other versions
DE69312505D1 (de
Inventor
David Kosmal
Derek Lentz
Glenn Poole
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Seiko Epson Corp filed Critical Seiko Epson Corp
Application granted granted Critical
Publication of DE69312505D1 publication Critical patent/DE69312505D1/de
Publication of DE69312505T2 publication Critical patent/DE69312505T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)

Description

    1. Einsatzgebiet
  • Die vorliegende Erfindung betrifft allgemein Computergraphiken und insbesondere ein System und ein Verfahren zum Bestimmen, weiche Pixel als Teil eines Dreieckes zum Rastern von Polygonen einzuordnen sind.
  • 2. Zugehöriger Stand der Technik
  • Rasteranzeigen werden gemeinhin bei Computergraphik-Systemen benutzt. Diese Anzeigen speichern Graphikbilder als eine Matrix von Bildelementen oder "Pixeln" (auch als PELs bezeichnet), wobei die das jeweilige Pixel darstellenden Daten in einem Anzeigepuffer gespeichert werden. Diese Daten bestimmen die Anzeigeattribute für jedes Pixel am Bildschirm, wie Intensität und Farbe des Pixels. Aus dem Anzeigepuffer wird ein Gesamtbild ausgelesen und auf dem Bildschirm aufgezeichnet durch aufeinanderfolgendes Auslesen von horizontalen Zeilen von Pixeldaten oder "Abtastzeilen" und Benutzen dieser Daten zum Steuern von einem oder von mehreren Elektronenstrahl(en) (selbstverständlich können auch andere Anzeigetechnologien, wie LCDs, verwendet werden). Dieses Verfahren des Auslesens von Pixeldaten aus dem Anzeigepuffer Zeile um Zeile wird bei jedem Durchgangszyklus wiederholt.
  • Rasteranzeige-Systeme benutzen gemeinhin Polygone als Grundbausteine oder "Primitive" zum Zeichnen komplexerer Abbilder. Dreiecke sind ein gemeingebräuchliches Grundprimitiv für Polygon-Zeichensysteme, da ein Dreieck das einfachste Polygon ist und kompliziertere Polygone immer durch einen Satz von Dreiecken dargestellt werden können. Das Verfahren zum Zeichnen von Dreiecken und anderen geometrischen Primitiven an dem Schirm ist als "Rastern" bekannt. Das Rastern von Polygonen ist sowohl bei zweidimensionalen wie bei dreidimensionalen Graphik- Systemen ein fundamentales Problem. Die meisten Techniken, die auf das Rastern von Dreiecken angewendet werden, können für ein Polygon mit einer beliebigen Anzahl von Seiten verallgemeinert werden.
  • Ein wichtiger Teil des Rasterns enthält das Bestimmen, welche Pixel in ein gewisses Dreieck fallen. Raster-Systeme schreiten allgemein von Pixel zu Pixel weiter und bestimmen, ob sie das jeweilige Pixel als Teil des Dreieckes "einordnen" (d.h. in einen Rahmenpuffer oder eine Pixelkarte einzeichnen). Dies bestimmt wiederum, wie die Daten bei der Darstellung jedes Pixels in den Anzeigepuffer einzusetzen sind. Verschiedene Durchquerungs-Algorithmen wurden entwickelt, um sich in einer solchen Weise von Pixel zu Pixel zu bewegen, daß alle Pixel innerhalb des Dreieckes überstrichen werden.
  • Rasterungs-Systeme stellen manchmal ein Dreieck als einen Satz von drei Kantenfunktionen dar. Eine Kantenfunktion ist eine lineare Gleichung, die eine gerade Linie repräsentiert, die dazu dient, eine zweidimensionale Ebene zu unterteilen. Kantenfunktionen klassifizieren jeden Punkt innerhalb der Ebene als in einen von drei Bereichen fallend: den Bereich zur "Linken" der Linie, den Bereich zur "Rechten" der Linie oder den Bereich, den die Linie selbst darstellt. Die Art von Kantenfunktion, die nun diskutiert wird, hat die Eigenschaft, daß Punkte zur "Linken" der Linie einen größeren Wert als Null besitzen, Punkte zur "Rechten" einen Wert kleiner als Null und genau auf der Linie befindliche Punkte einen Wert Null besitzen (dies ist in Fig. 1 zu sehen). An Rasterungs-Systeme angewendet, wird die zweidimensionale Ebene durch den Graphik-Schirm und werden die Punkte durch die einzelnen Pixel dargestellt, und die Kantenfunktion dient dazu, den Graphik-Schirm zu unterteilen.
  • Dreiecke werden durch die Vereinigung von drei Kanten geschaffen, von denen jede durch eine Kantenfunktion dargestellt ist. Es ist möglich, komplexere Polygone durch Benutzen voil "Boole'schen Kombinationen von mehr als drei Kanten zu definieren.
  • Da das Rastern von Dreiecken das Bestimmen umfaßt, welche Pixel wo einzuordnen sind, wird allgemein eine Tie-Break-Regel angewendet auf Pixel, die genau an irgendeiner der Kanten liegen, um zu bestimmen, ob die Pixel als innerhalb oder außerhalb des Dreieckes liegend zu betrachten sind.
  • Jedem Pixel ist ein Satz von Kantenvariablen (e&sub0;, e&sub1;, e&sub2;) zugeordnet, welche, wie in Fig. 2 gezeigt, den mit Vorzeichen versehenen Abstand zwischen dem Pixel und den drei jeweiligen Kanten darstellen&sub4; Der Wert jeder Kantenvariablen wird für ein bestimmtes Dreieck durch Bewerten der drei Kantenfunktionen f&sub0;(x,y), f&sub1;(x,y) und f&sub2;(x,y) für den Pixelort bestimmt. Kantenvariable können Bruchwerte besitzen, da eine Kante zwischen zwei benachbarte Pixel fallen kann. Es ist deshalb vorteilhaft, Kantenvariable in einem Festkomma-Zweierkomplement-Ganzzahlenformat darzustellen. Es ist zu bemerken, daß bestimmt werden kann, ob ein Pixel in ein Dreieck fällt oder nicht durch Ansehen der Vorzeichen von e&sub0;, e&sub1; und e&sub2;, wenn es bekannt ist, ob jede Kante eine "rechte" Kante oder eine "linke" Kante des Dreieckes ist. Man bemerke, daß die Vorzeichen der Kanten ggf. umgekehrt werden können.
  • Beim Bestimmen, welche Pixel innerhalb eines Dreieckes einzuordnen sind, errechnen typische Rasterungs-Systeme die Werte der Kantenvariablen (e&sub0;, e&sub1;, e&sub2;) für einen bestimmten Satz von drei Kantenfunktionen und eine bestimmte Pixelposition, und benutzen dann einen Satz von Zuwachswerten (Δelinks, Δerechts, usw.), um die Werte der Kantenvariablen für benachbarte Pixel zu bestimmen. Das Rasterungs-System durchquert das Dreieck mit Hinzufügen der Zuwachswerte zu den laufenden Werten, wenn ein Durchquerungs-Algorithmus von Pixel zu Pixel fortschreitet. Ein Pixel, das sich gemäß den drei Kantenvariablenwerten des Pixels (und ggf. von Tie-Break-Regeln) innerhalb der Begrenzungen des Dreieckes befindet, wird eingeordnet.
  • Systeme mit einfacher Hardware führen diese Berechnungen allgemein für jedes Pixel separat aus, während komplexere Systeme mit mehr arithmetischen Einheiten die Werte für mehrere Pixel gleichzeitig errechnen können. Obwohl Parallelauswertungen der Kantenvariablen für mehrere Pixel ein schnelleres Rastern ergeben, bleibt der Vorgang begrenzt durch die Notwendigkeit, die Kantenvariablen für jedes überquerte Pixel separat zu bestimmen. Eine Überprüfung einer Kantenfunktion, die benutzt werden kann, um Dreiecke zu rastern, und von verschiedenen Algorithmen zum Durchqueren des Dreieckes ergibt ein besseres Verständnis des vorstehend beschriebenen Verfahrens. Eine detaillierte Beschreibung der Verwendung von Kantenfunktionen und Durchquerungs-Algorithmen kann gefunden werden in dem Aufsatz "A Parallel Algorithm for Polygon Rasterization", von J. Pineda, Computer Graphics 22(4):17-20 (1988), der hier zu Vergleichszwecken angeführt wird. Wesentliche Abschnitte dieses Aufsatzes von Pineda werden nachstehend zur Bequemlichkeit für den Leser wiedergegeben.
  • Man betrachte, wie in Fig. 3 gezeigt, einen durch zwei Punkte (X,Y) und (X+dX,Y+dY) definierten Vektor und die Linie, die durch die beiden Punkte hindurchgeht. Wie vorher angegeben, kann dieser Vektor und die Linie benutzt werden, um den zweidimensionalen Raum in drei Bereiche zu unterteilen: alle Punkte zur "Linken" der Linie, alle zu ihrer "Rechten" und alle genau auf der Linie befindlichen.
  • Die Kante f(x,y) kann definiert werden als:
  • f(x,y) = (x-X)dY - (y-Y)dX
  • Diese Fünktion hat die nützliche Eigenschaft, daß ihr Wert auf die Position des Punktes (x,y) relativ zu der durch die Punkte (X,Y) und (X+dx, Y+dY) definierten Kante bzogen ist:
  • f(x,y) > 0, falls (x,y) auf der "rechten" Seite
  • f(x,y) = 0, falls (x,y) genau an der Linie
  • f(x,y) < 0, falls (x,y) auf der "linken" Seite.
  • Um sich selbst zu überzeugen, daß dies gilt, wird der Fachmann auf diesem Gebiet erkennen, daß die für f(x,y) gegebene Formel die gleiche ist, wie die Formel für die Größe des Vektorproduktes für Vektor von (X,Y) nach (X+dx, Y+dY) und den Vektor von (X,Y) nach (x,y). Nach den gut bekannten Eigenschaften von Vektorprodukten ist die Größe Null, falls die Vektoren kollinear sind, und wechselt das Vorzeichen, wenn die Vektoren von der einen Seite zur anderen überschreiten.
  • Diese Funktion wird gemeinhin durch bestehende Raster-Systeme benutzt, da sie inkremental durch einfache Addition berechnet werden kann:
  • f(x+1,y) = f(x,y) + dY
  • f(x,y+1) = f(x,y) + dX
  • Die Kantenfunktion wird auf den Fehlerwert oder "die Zeichensteuervariable" (draw control variable DCV) in Bresenham- Linienzieh-Algorithmen bezogen, die beschrieben sind in "Algorithm for Computer Control of a Digital Plotter", J. Bresenham, IBM Systems Journal 4(1):25-30 (1965). Der Unterschied besteht darin, daß die Bresenham-Linienzieh-Algorithmen den DCV-Wert nur bei Pixeln innerhalb von einem halben Pixel der Zeile aufrechterhalten, während f(x,y) für alle Pixel in der Ebene definiert ist. Zusätzlich unterscheidet sich der Wert der DCV bei einem bestimmten Punkt von f(x,y) durch einen konstanten Versatz. Auf jeden Fall ist die Begründung, daß beide Algorithmen funktionieren, grundsätzlich die gleiche.
  • Diese gleiche Eigenschaft von f(x,y) wird durch das Graphiksystem benutzt, das in dem "PIXELPLANES"-Graphiksystem nach dem Aufsatz von Fuchs u.a., VLSI Design (3rd Quarter):20-28 (1981) beschrieben ist, wo diese Funktion parallel für alle Pixel im Rahmenpuffer durch einen Multipliziererbaum errechnet wird.
  • Es wird gegenwärtig bei verschiedenen Raster-Systemen eine Vielheit unterschiedlicher Durchquerungs-Algorithmen in dem Zuordnungsvorgang benutzt. Jeder Algorithmus kann benutzt werden, für den garantiert ist, das er alle Pixel innerhalb des Dreieckes überdeckt. Fig. 4 zeigt zwei einfache Ausführungen von Durchquerungs-Algorithmen. Das Durchqueren des Begrenzungskastens ist vielleicht die einfachste Strategie, wie in Fig. 4(a) gezeigt, jedoch im allgemeinen nicht die wirksamste. Ein schlauerer Algorithmus nach Fig. 4(b) geht zur nächsten Durchquerungs-Zeile weiter, wenn er von der Kante eines Dreieckes weg"wandert". Eine Komplizierung des schlaueren Algorithmus ist, daß, wenn er zur nächsten Zeile weitergeht, er möglicherweise zu einem Punkt innerhalb des Dreieckes übergehen kann. In diesem Fall muß der Algorithmus nach der Außenseite der Kante suchen, bevor er die nächste Abtastzeile beginnt. Ein Beispiel dieses Problems ist an der oberen rechten Kante des Dreieckes in Fig. 5 gezeigt.
  • Eine Verwirklichung eines noch schlaueren Algorithmus ist in Fig. 6 gezeigt. Er geht von dem Ausgangspunkt nach unten weiter und arbeitet seinen Weg von einer Mittellinie nach außen ab. Der Vorteil dieses Algorithmus gegenüber dem einfacheren Algorithmus besteht darin, daß er niemals nach einer Kante suchen und dann den gleichen Weg zurückgehen muß. Der zugehörige Nachteil ist, daß der Interpolator-Zustand für die Mittellinie gespeichert werden muß, während die äußeren Punkte überschritten werden, da der Interpolator immer an der Mittellinie gestartet werden muß. Man bemerke, daß sich die "Mittel"Linie an der Unterseite verschiebt, wenn sie außerhalb des Dreieckes endet.
  • Es gibt eine Anzahl unterschiedlicher Wege, die Pixel in dem Dreieck zu durchqueren. Die Wirksamkeit jedes Verfahrens hängt von dem bestimmten einzuordnenden Dreieck ab. Viele Systeme organisieren Pixel in dem Speicher in rechtwinkligen Blöcken. Einige dieser Systeme können diese Blöcke in einem schnellen Speicher schnellpuffern (cachen) ähnlich der Weise, wie eine CPU Daten und Befehle schnellpuffert. Bei Verwendung im Zusammenhang mit einem angemessenen Durchquerungs-Algorithmus kann dieses Organisieren das Verhalten verbessern, indem die Speicherzugriffe minimal gehalten werden.
  • Ohne Rücksicht auf die Größe der verfügbaren Hardware oder das Verfahren zum Durchqueren der Pixel innerhalb des Dreieckes müssen mindestens zwei Zusatzliche Betätigungen pro Pixel ausgeführt werden, wenn das vorangehend beschriebene Pixel-um- Pixel-Verfahren benutzt wird. Diese drei Zusätze entsprechen den drei Zuwachswerten, die den Werten e&sub0;, e&sub1; und e&sub2; der Kantenvariablen hinzugefügt werden müssen, um die jeweiligen Werte für ein benachbartes Pixel zu bestimmen, wie oben diskutiert. So ist bei den gegenwärtigen Raster-Techniken der Wirkungsgrad begrenzt durch die Anzahl von Rechenvorgängen pro Pixel, die erforderlich sind, ob das Pixel in das Dreieck fällt oder nicht. Dieser begrenzte Wirkungsgrad wirkt sich zur Verlangsamung von Graphikanzeigesystemen aus. Es ist deshalb ein Verfahren zum Einordnen von Dreiecken erforderlich, das die Anzahl der pro Pixel erforderlichen Rechenvorgänge herabsetzt.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Die vorliegende Erfindung, wie sie in den Ansprüchen 1 und 6 dargestellt ist, schafft ein System bzw. ein Verfahren zum Rastern von Polygonen. Jede Ecke des Polygons (z.B. eines Dreieckes) wird durch eine Linearkantenfunktion dargestellt, die jedes Pixel in der Ebene des Polygons klassifiziert. Insbesondere befinden sich Pixel mit einem Wert größer als Null an einer Seite einer Kante und mit einem Wert kleiner als Null an der gegenüberliegenden Seite einer Kante. Jedem Pixel innerhalb der Polygonebene ist ein Satz von Kantenvariablen zugeordnet, die den mit Vorzeichen versehenen Horizontalabstand zwischen dem Pixel und den jeweiligen Kanten des Polygons darstellen. Ein Pixel wird eingeordnet aufgrund des Wertes seiner Kantenvariablen, die mit Bezug auf die Kantenfunktionen erzeugt werden.
  • Die vorliegende Erfindung erlaubt es, die Kantenfunktionen auf eine lineare Spanne von Pixeln anzuwenden. Anfangs wird der Wert eines Satzes von Kantenvariablen für ein bestimmtes Pixel innerhalb eines Dreieckes bestimmt durch Auswerten der drei dem Dreieck zugeordneten Kantenfunktionen. Um zu bestimmen, welche Pixel einzuordnen sind, erzeugt die vorliegende Erfindung eine W-Bit-Einordnungsmaske aufgrund der Werte dieser Kantenvariablen. Die vorliegende Erfindung läßt diese Werte auf die Pixelspanne anwenden, ohne Notwendigkeit, zusätzliche Berechnungen für den Rest der Pixel innerhalb der Spanne auszuführen.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die genannten und weitere Vorteile dieser Erfindung können besser verstanden werden durch Bezug auf die nachfolgende Beschreibung, wenn sie in Zusammenhang mit den beigefügten Zeichnungen genommen wird, in welchen:
  • Fig. 1 die Unterteilung jedes Punktes innerhalb einer Ebene als in eine von drei Regionen fallend darstellt.
  • Fig. 2 die Zuordnung eines Satzes von Kantenvariablen zu einem bestimmten Pixel darstellt.
  • Fig. 3 graphisch einen Vektor und eine Linie darstellt, welche eine Kantenfunktion repräsentieren, die zum Unterteilen eines zweidimensionalen Raumes in drei Regionen benutzt werden kann.
  • Fig. 4(a) und Fig. 4(b) zwei einfache Algorithmen zum Durchqueren der Pixel innerhalb eines bestimmten Dreieckes zeigen.
  • Fig. 5 eine Lösung des in Fig. 4(b) gezeigten Problems darstellt.
  • Fig. 6 einen ausgeklügelteren Algorithmus (mit Bezug auf den in Fig. 4 gezeigten) zum Durchqueren der Pixel innerhalb eines bestimmten Dreieckes darstellt.
  • Fig. 7 ein Blockschaltbild der durch die vorliegende Erfindung benutzten Abtast-Hardware ist.
  • Fig. 8 eine in drei Bitfelder aufgeteilte Kantenvariable darstellt.
  • Fig. 9 ein Beispiel eines einzuordnenden Dreieckes darstellt.
  • Fig. 10 ein Beispiel einer Maskenerzeugung für eine linke Kante darstellt.
  • Fig. 11(a) und Fig. 11(b) ein Flußdiagramm eines Polygon- Rasterverfahrens zeigen.
  • Fig. 12 ein Beispiel eines Dreieckes zeigt, das teilweise aus einem Fenster herausfällt.
  • In den Zeichnungen bezeichnen gleiche Bezugszahlen identische oder funktionell gleichartige Elemente. Zusätzlich identifiziert die ganz links stehende Ziffer (oder Zifferngruppe) die Zeichnung, in der die Bezugszahl zum ersten Mal auftritt.
  • DETAILLIERTE BESCHREIBUNG DER VORLIEGENDEN ERFINDUNG
  • Die vorliegende Erfindung schafft ein System und ein Verfahren zum Rastern von Polygonen. Die vorliegende Erfindung erfordert weniger Rechenvorgänge, um Pixel innerhalb eines Polygons einzuordnen, als das übliche Pixel-um-Pixel-Verfahren. Jede Kante eines Polygons (z.B. eines Dreieckes) wird durch eine Linearkantenfunktion dargestellt, die an einer Seite der Kante einen Wert größer Null und an der gegenüberliegenden Seite der Kante einen Wert kleiner Null besitzt. Die vorliegende Erfindung erlaubt das Anwenden von Kantenfunktionen auf eine Linear- Spanne von Pixeln, während sie nur die Kantenfunktions-Zusatzvorgänge für eines der Pixel innerhalb der Spanne auszuführen erfordert. Die bei der vorliegenden Erfindung anfangs zum Rastern benutzten Rechenwerte (d.h. beim Rastern mit Benutzen einer einzigen linearen Spanne) sind gleichartig denen, die für Pixel-um-Pixel-Rastern erforderlich sind. Es sind folgende:
  • Die gegenwärtige Abtastposition (d.h. ein vorgegebenes Pixel) in dem Durchquerungs-Algorithmus wird durch Koordinaten (x,y) repräsentiert.
  • Ein Satz von Kantenvariablen e&sub0;, e&sub1;, e&sub2;, repräsentiert im Festkomma-Zweierkomplement-Ganzzahlenformat, entsprechend den drei jeweiligen Kantenfunktionen f&sub0;, f&sub1;, f&sub2; (z.B. e&sub0;=f&sub0;(y)-x). Jede Kantenvariable besteht aus einem ganzzahligen Feld (das ein Vorzeichenbit enthält) und einem Bruchteilefeld.
  • Ein 1Bit-Kantenmerker für jede Kante, der angibt, ob die Kante als eine "rechte Kante" oder eine "linke Kante" des Dreieckes zu behandeln ist. Ein gesetzter Merker bezeichnet eine rechte Kante und zeigt an, daß Pixel, die zur rechten Seite der Kante liegen, und so einen entsprechenden Kantenvariablenwert größer als Null besitzen, nicht innerhalb des Dreieckes liegen. Pixel mit einem negativen Wert für eine rechte Kante können in das Dreieck fallen. Ein gelöschter Merker bezeichnet eine linke Kante, und daß nur Pixel mit positiven Werten in das Dreieck fallen können. Der Merker spezifiziert deshalb, wie die Werte in Bezug auf eine bestimmte Kante zu deuten sind. Wenn eine Kantenvariable den Wert Null besitzt, ist es Entscheidungssache, ob das zugehörige Pixel innerhalb des Dreieckes oder außerhalb des Dreieckes liegt (vorausgesetzt, daß die Entscheidung konsistent durchgeführt wird).
  • Es ist möglich, die Kantenvariablen so zu organisieren, daß nur ein Merker zum Deuten der Kantenvariablen benötigt wird. In diesem Falle bezeichnet ein gesetzter Merker, daß das Dreieck rechtsorientiert ist, was bedeutet, daß e&sub1; eine linke Kante ist und e&sub0;, e&sub2; rechte Kanten sind. Wenn der Merker nicht gesetzt ist, ist das Dreieck linksorientiert und die Kanten haben umgekehrten Sinn. Alle Dreiecke passen in einen dieser beiden Fälle.
  • Ein Satz von "Schrittwerten" für jede Kantenvariable (nach rechts, nach links usw.): die Schrittwerte werden zu den Werten der Kantenvariablen hinzugefügt oder von ihnen abgezogen, um die Werte für benachbarte Pixel zu bestimmen. Jede Kantenvariable hat für irgendeine Richtung, in der die Durchquerung abgetastet wird, einen Zuwachswert. Diese Werte sind ebenfalls Festkomma-Zweierkomplement-Ganzzahlwerte.
  • Die vorliegende Erfindung arbeitet mit einer W Pixel breiten Spanne von Pixeln. W kann irgendeine Potenz von 2 sein. Die Dimensionen der Spanne brauchen nicht notwendigerweise den Datenblöcken entsprechen, auf die durch das Speichersyystem zugegriffen wird, obwohl dadurch allgemein die Speicherbandbreiten-Benutzung abnimmt.
  • Nach Fig. 7 wird die durch die gegenwärtige Erfindung benutzte Abtast-Hardware in drei Teile unterteilt: (1) ein einfacher Ganzzahlen-Datenweg 710; (2) eine Pixelmasken-Erzeugungseinheit 720; und (3) eine Einordnungseinheit 730. Der Ganzzahlen- Datenweg 710 ist eine einfache Geradeauseinheit, die Register für die Rechenwerte, eine oder mehrere Addier/Subtrahier- Einheiten und zugehörige Steuerlogik enthält. Insbesondere enthält der Ganzzahlen-Datenweg 710 Hardware zum Erzeugen der Kantenvariablen für jede Kante in dem Dreieck, in das gerade eingeordnet wird. Die Pixelmasken-Erzeugungseinheit 720 bestimmt, welche Pixel innerhalb einer Spanne von w Pixeln einzuordnen sind durch Erzeugen einer Pixel-Maske aufgrund der durch den Ganzzahlen-Datenweg 710 geschaffenen Kantenvariablen. Diese Einheit erzeugt eine separate Maske, die als Einordnungsmaske für jede Kantenvariable bezeichnet wird, und erzeugt die logische UND-Verknüpfung der drei Masken als endgültiges Ausgangssignal (d.h. Einordnungsmaske 725). Wie nachstehend beschrieben wird, werden bei einer bevorzugten Ausführung nur zwei Masken verwendet, um die Einordnungsmaske zu erzeugen. Jedes Bit in der Einordnungsmaske repräsentiert ein einzelnes Pixel an dem Bildschirm. Die Einordnungseinheit 730 nimmt die Einordnungsmaske 725 von der Maskenerzeugungseinheit 720 und gibt Befehle 735 für jedes Pixel an das Speichersystem aus, um es entweder einzuordnen oder nicht.
  • Um zu bestimmen, welche Pixel einzuordnen sind, erzeugt das System eine W-Bit Einordnungsmaske 725 aufgrund der Werte der Kantenvariablen für ein einzelnes Pixel (d.h. das erste Pixel in der Pixelspanne). Bits, die in der Einordnungsmaske gesetzt sind, bezeichnen, welche Pixel als Teil des Dreieckes einzuordnen sind. Um das jeweilige Einordnungsmaskenbit für ein bestimmtes Pixel zu bestimmen, werden drei Kantenmaskenbits erzeugt (wie im Hintergrundabschnitt beschrieben), von denen jedes anzeigt, wie das Pixel zur Dreieckseite einer der jeweiligen Kanten liegt. Das Einordnungsmaskenbit wird dann durch logisches UNDen der drei Kantenmaskenbits erzeugt. Das sich ergebende Einordnungsmaskenbit ist "1", wenn das Pixel als Teil des Dreieckes einzuordnen ist, und ist "0", wenn dies nicht zutrifft. Jede Einordnungsmaske, die aus einer Folge von W Bits besteht, besteht aus dem Einordnungsmaskenbit für das Pixel an der Position (x,y) und den Einordnungsmaskenbits für die nächsten W-1 Pixel in der horizontalen Zeile. Es sollte bemerkt werden, daß die vorliegende Erfindung leicht mit Benutzung von Vertikalabständen zwischen den Pixeln und den Kanten des Dreieckes statt von Horizontalabständen angewendet werden kann. Bei jeder Kantenvariable sind drei interessierende Bitfelder bei der Kantenmaskenerzeugung vorhanden. Das erste Feld ist das Vorzeichenbit. Das zweite Feld besteht aus den Teilspannen- Positionsbits, die die N Bits geringster Mächtigkeit des ganzzahligen Abschnitts der Kantenvariablenbits sind, wobei W=2N. Das dritte Feld besteht aus den Spannenpositionsbits, welche die restlichen Bits im ganzzahligen Teil der Kantenvariablen sind. Fig. 8 zeigt diese Felder für eine Spanne von 4 Bits. Die sich ergebende Kantenvariable beträgt 16 Bits mit einem ganzzahligen Abschnitt von 8 Bits und einem Bruchteileabschnitt von 8 Bits. Man bemerke, daß für W=4 die Größe des Teilspannen-Feldes N = W/2 = 2 beträgt. Der Bruchteileabschnitt wird nicht für die Maskenerzeugung benutzt. Stattdessen wird er benutzt, um die Genauigkeit aufrecht zu erhalten, wenn die Kantenvariablen erhöht oder aufgezählt werden.
  • Die drei Bitfelder des Kantenvariablenwertes werden benutzt, um zu bestimmen, wie die entsprechenden Pixel zur Dreieckseite der Kante liegen. Zusätzlich werden diese gleichen drei Felder benutzt, um zu bestimmen, wie jedes der anderen W-1 Pixel der Horizontalspanne zur Dreieckseite der Kante liegt. Selbstverständlich werden die Werte der Kantenvariablen für linke und rechte Kanten unterschiedlich gedeutet, jedoch ist die allgemeine Idee für beide Fälle gleich. Die Tabellen 1 und 2 zeigen die für linke bzw. rechte Kanten erzeugten Masken. In diesem Beispiel wird eine Spannengröße vier (w=4) benutzt, obwohl diese Tabelle leicht für jede Spannengröße, die eine Potenz von 2 ist, verallgemeinert werden kann. In den Tabellen wird angenommen, daß Pixel auf der Dreieckskante sich bei linken Kanten in dem Dreieck und bei rechten Kanten außerhalb des Dreieckes befinden. Tabelle 1: Maskenerzeugung für linke Kanten Tabelle 2: Maskenerzeugung für rechte Kanten
  • Die Erzeugung dieser Tabellen wird mit Bezug auf Fig. 9 und Fig. 10 beschrieben. Fig. 9 zeigt ein Beispiel eines Pixelgitters mit einem darin enthaltenen einzuordnenden Dreieck. Die drei Ecken sind die Punkte (5,2), (2,15) und (14,11). Diese Eckpunkte bilden drei Kanten, die in dem Diagramm als e&sub0;, e&sub1; und e&sub2; gezeigt sind. Dieses bestimmte Beispiel stellt ein rechtsorientiertes Dreieck dar, da die beiden Kanten e&sub0; und e&sub2; die Begrenzungen der rechten Seite des Dreieckes bilden und nur eine Kante die Begrenzung an der linken Seite bildet. Ein linksorientiertes Dreieck hat zwei linke Kanten und eine rechte Kante. Das Pixelgitter wird in Spannen unterteilt, die eine Breite von 4 Pixel haben. Jedoch ist wiederum jede Spanne, die eine Potenz von 2 ist, für den später zu beschreibenden Pixelspannen-Mechanismus akzeptabel.
  • Tabellen 1 und 2 sind begründet auf der Definition von Kantenvariablen als dem Horizontalabstand zwischen einem Pixel und der Kante. Fig. 10 zeigt unterschiedliche Werte der Kantenvariablen für eine linke Kante bei verschiedenen Pixelpositionen. Für eine linke Kante bezeichnet ein negativer Wert, daß das betreffende Pixel und alle Pixel nach rechts innerhalb der Begrenzung der Kante liegen (Spanne a). Die der Spanne a zugeordnete Kantenvariable ist gleich -2,1 (binär 1...1110). Die Maske für alle Linkskantenvariablen mit einem negativen Wert ist 1111. Mit anderen Worten, diese Maske bezeichnet, daß alle Pixel in der Spanne eingeordnet werden sollten.
  • Wenn die linke Kante nichtnegativ ist, sind zwei Fälle zu betrachten. Der erste besteht, wenn der Wert der Kantenvariablen kleiner als w ist (Spanne b). In diesem Fall sind alle Spannenbits Nullen, und die Teilspannen-Bits werden benutzt, um zu bestimmen, welche Bits in der Maske gesetzt sind. Die Teilspannen-Bits können entweder gleich 00, 01 10 oder 11 sein. Es bestehen vier Möglichkeiten, da vier Pixel in der Maske repräsentiert sind. Jede Möglichkeit repräsentiert einen unterschiedlichen Satz von einzuordnenden Pixeln. In dem gezeigten Beispiel ist die Kantenvariable für b gleich 1,4 (binär 0...0001). Die Teilspannen-Positionsbits sind 01, und damit ist die Maske 0011. Mit anderen Worten, diese Maske stellt die Tatsache dar, daß die zwei am weitesten rechts liegenden Pixel in der Maske eingeordnet werden sollten.
  • Der zweite Fall eines nichtnegativen Wertes einer Kantenvariablen besteht dann, wenn der Wert größer oder gleich w ist (Spanne c). Hier werden die Spannen-Positionsbits nicht Null sein. Die sich ergebende Maske sollte so anzeigen, daß alle in der Maske repräsentierten Pixel nicht eingeordnet werden sollten, da alle Pixel in der Spanne links von der Kante liegen. Bei dem Beispiel ist die Kantenvariable für die Spanne c gleich 5,1 (binär 0...0101). Demzufolge werden alle Bits in der Maske Null sein (d.h. 0000). Die Maskenerzeugungstabelle für rechte Kanten wird in einer gleichartigen Weise bestimmt.
  • Fig. 11 stellt ein Flußdiagramm der Durchführung der Pixelspannen-Technik dar. Mit einem zum Einordnen bestimmten Dreieck wird ein Ausgangspixel ausgewählt, wie im Schritt 1110 gezeigt. Drei Kantenvariable werden entsprechend dem ausgewählten Pixel erzeugt, wie im Schritt 1115 gezeigt.
  • Um zu bestimmen, ob ein Pixel eingeordnet werden sollte, müssen nur zwei der drei Kanten benutzt werden, nämlich eine rechte Kante und eine linke Kante. Wenn beispielsweise das betrachtete Dreieck zwei rechte Kanten besitzt (d.h. ein rechtsorientiertes Dreieck ist), hängt die Kante, die als die rechte Grenze benutzt wird, von dem Wert von y ab. Wenn y über dem Eckpunkt liegt, der die beiden rechten Kanten verbindet, wird die obere rechte Kante benutzt. Sonst wird die untere rechte Kante benutzt. Wie im Schritt 1120 gezeigt, werden die zwei zum Erzeugen der Einordnungsmaske erforderlichen Kanten ausgewählt.
  • Die Schritte 1125 bis 1170 repräsentieren die Verwendung der Tabellen 1 und 2. Man bemerke, daß diese Schritte sich je nach Größe der benutzten Spanne unterscheiden werden. Wie im Schritt 1125 gezeigt, wird das Vorzeichen der Kantenvariable für die rechte Kante geprüft. Wenn es negativ ist (was symbolisiert, daß die Spanne sich außerhalb des Dreieckes befindet), wird die Maske auf 0000 gesetzt, wie im Schritt 1130 gezeigt. Als nächstes werden die Spannen-Positionsbits geprüft, wie im Schritt 1135 gezeigt. Wenn die Spannen-Positionsbits nicht Null sind (was symbolisiert, daß die Spanne sich innerhalb des Dreieckes befindet), wird die Maske auf 1111 gesetzt, wie im Schritt 1140 gezeigt. Sonst werden die Teilspannen-Bits geprüft, wie im Schritt 1145 gezeigt, und die zugehörige Maske wird aufgrund der Werte dieser Bits ausgewählt.
  • Die Schritte 1150 bis 1170 stellen die Erzeugung der Maske für die linke Kante dar. Die Schritte sind analog den vorstehend für die rechte Kante beschriebenen.
  • Die sich ergebende Maske, die bestimmt, welche Pixel einzuordnen sind, ist einfach das logische UND der für die beiden Kanten (d.h. der rechten Kante und der linken Kante) geschaffenen Masken, wie im Schritt 1175 gezeigt. Die Einordnungspixelmaske wird zu der Einordnungseinheit 730 durchgeleitet, wo die entsprechenden Steuersignale für jedes einzuordnende Pixel zu dem Speichersystem gesendet werden, wie im Schritt 1185 gezeigt.
  • Parallel zum Schritt 1185 wird ein Zuwachswert zu der Kantenvariablen hinzugefügt, und der Vorgang kann im Schritt 1120 für das nächste Pixel beginnen, wo das nächste Pixel das erste Pixel nach der Spanne ist, welches in den Weg des jeweils verwendeten Durchquerungs-Algorithmus fällt.
  • Das Durchqueren des Dreieckes kann in einer Anzahl von Weisen vollbracht werden, gleichartig zu den vorstehend beschriebenen herkömmlichen Raster-Verfahren. Beim Durchqueren in einer horizontalen Richtung muß der Datenweg die Kantenwege für die Pixel in der Position (x±w,y) errechnen. Das kann mit Benutzen der horizontalen Schrittwerte für ein Einzelpixel erledigt werden, das um n Bits nach links verschoben ist, wobei w=2n. Das erfordert keine Verschiebungs-Hardware, sondern einfach einen Multiplexer, der entweder den geschobenen oder den ungeschobenen Wert auswählt.
  • Gelegentlich besitzt ein einzuordnendes Dreieck eine horizontale Kante. In diesen Fällen benutzt die vorliegende Erfindung die restlichen zwei Kanten (und nicht die horizontale Kante) zusammen mit dem vorstehend umrissenen Vorgang, um zu bestimmen, welche Pixel innerhalb einer Pixelspanne einzuordnen sind. Mit anderen Worten, da nur zwei Kanten benutzt werden, um zu bestimmen, ob ein Pixel eingeordnet werden soll, und nur eine rechte und eine linke Kante vorhanden ist, besteht keine Notwendigkeit, den Wert von y zu überprüfen, um zu bestimmen, ob er über oder unter der Ecke des Dreieckes liegt, welche die zwei rechten bzw. zwei linken Kanten verbindet. Im Falle eines Dreieckes mit einer horizontalen Kante befindet sich die Ecke entweder an der ersten Spanne (z.B. wenn die horizontale Kante die obere Kante des Dreieckes ist), oder der letzten Spanne (z.B., wenn die horizontale Kante die untere Kante des Dreiekkes ist). Demzufolge sind nur die zwei restlichen Kanten zur Erzeugung der Pixelmasken erforderlich.
  • Die vorliegende Erfindung bietet verschiedene Vorteile gegenüber herkömmlichen Dreieck-Rasterungsverfahren. Erstens sind weniger Rechenvorgänge pro Pixel erforderlich. Die Anzahl von arithmetischen Vorgängen, die zum Aufrechterhalten der Kantenvariablen während der Durchquerung erforderlich sind, ist ein Satz für jede Pixelspanne. Das wird erreicht ohne Benutzung zusätzlicher Addier/Subtrahier-Hardware für jedes Pixel. Zweitens besitzt die vorliegende Erfindung einen "Pipeline"- Betrieb. Der Ganzzahlen-Datenweg 710, die Maskenerzeugungseinheit 720 und die Einordnungseinheit 730 können unabhängig in einer hintereinander geschalteten (Pipeline-) Gestaltung arbeiten. Das erlaubt Parallelberechnung ohne besondere Hardware. Drittens ist die vorliegende Erfindung mit wirksamen Speicherarchitekturen konsistent. Das Einordnen von Pixeln in horizontalen Spannen erlaubt eine leichte Ausführung von Durchquerungs-Algorithmen, die mit blockorganisierten Pixelspeichern kompatibel sind.
  • Es folgt eine Beschreibung von zwei Mechanismen zum Rastern von Dreiecken in Graphik-Hardware-Systemen. Der erste Mechanismus, der als Einzelpixel-Mechanismus bezeichnet wird, ist eine Version einer herkömmlich benutzten Technik. Er wird an dieser Stelle im Dokument beschrieben, so daß er klar in Gegensatz zu dem verbesserten Betrieb der vorliegenden Erfindung gebracht werden kann, der unmittelbar danach beschrieben wird. Die vorliegende Erfindung wird als zweites beschrieben und wird als Pixelspannen-Verfahren bezeichnet. Die Pixelspannen-Technik kann Dreiecke mit Benutzung von weniger Vorgängen pro Pixel einordnen.
  • Einzelpixel-Verfahren
  • Dreieck-Einordnen benutzt eine Routine, welche einen Supersatz der Pixel innerhalb des Dreieckes durchquert und bei jedem Pixel einen Test ausführt, um zu bestimmen, ob es eingeordnet werden sollte. Verfahren zum Bestimmen der Reihenfolge der Durchquerung werden hier nicht besprochen, sondern stattdessen werden bei der Beschreibung des Beispiels einfache Annahmen bezüglich des Durchquerungs-Algorithmus gemacht. Die Entscheidung, ein Pixel einzuordnen, wird üblicherweise aufgrund des Satzes von Kantenvariablen gefällt, die bei jedem Pixel aktualisiert werden. Die Kantenvariablen werden mit e&sub0;, e&sub1; und e&sub2; bezeichnet. Bei dieser Besprechung wird eine Kantenvariable als der horizontale Abstand von der betreffenden Pixelposition in der Abtastzeile zu der durch die Dreieckkante gebildeten Linie definiert. Es gibt viele Abwandlungen, wie die Kantenvariablen definiert werden können, doch sind alle allgemein von diesem allgemeinen Konzept abgeleitet.
  • Wenn f(y) eine Funktion ist, welche die x-Position einer Kante bei einem bestimmten y ergibt, wird der zu e = f(y) - x. f(y) bestimmte Wert der Kantenvariablen e am Pixel (x,y) die Kantenfunktion für die bestimmte Kante genannt, und sie ist leicht aus den Dreieckkoordinaten unter Benutzung von Grundsatz- Algebra zu bestimmen. Bei dem Beispiel sind die Kantenfunktionen für die drei Kanten wie folgt:
  • f&sub0;(y) = y + 3
  • f&sub1;(y) = -0,231y + 5,46
  • f&sub2;(y) = 3y + 47.
  • Unter Benutzung unserer Definition für die Kantenvariablen gilt die folgende Interpretation der Werte: falls die Kantenvariable positiv ist, liegt das Pixel (x,y) zur Linken der Kante, falls sie negativ ist, zur Rechten der Kante, und falls sie Null ist, auf der Kante. Um zu bestimmen, ob das Pixel sich innerhalb der Begrenzungen des Dreieckes befindet, werden zwei Kantenvariable benutzt; eine, welche die linke Begrenzung definiert und eine, welche die rechte definiert. Ein Pixel befindet sich innerhalb der Grenzen eines Dreieckes, wenn die dem Pixel zugehörige Kantenvariable nicht negativ ist. Wenn die Kantenvariable für ein bestimmtes Pixel Null ist, ist es Entscheidungssache, ob das Pixel als innerhalb der Begrenzungen an der Kante liegend angesehen wird. Es ist jedoch zum Einordnen benachbarter Dreiecke nützlich, wenn der Fall einer nullwertigen Kantenvariablen für die linke und die rechte Kante unterschiedlich behandelt wird (z.B. innen für rechte Kanten und außen für linke Kanten).
  • Bei dem Beispiel sind zwei rechte Begrenzungen bestimmende Kanten vorhanden, da es sich um ein rechtsorientiertes Dreieck handelt. Das betrachtete Dreieck ist ein rechtsorientiertes Dreieck und besitzt zwei rechte Kanten. Da y sich über der die beiden rechten Kanten verbindenden Ecke befindet, wird die obere rechte Kante benutzt.
  • Der Durchquerungs-Algorithmus beginnt das Abtasten bei einem Pixel und bestimmt den Wert der Kantenvariablen aufgrund der vorstehenden angegebenen Funktionen. Für das Beispiel wird angenommen, daß der Einzelpixel-Durchquerungs-Algorithmus die Pixel (5,2), die obere Ecke, als Ausgangspunkt benutzt. Deswegen sind die Anfangswerte der Kantenvariablen wie folgt:
  • e&sub0; = 0
  • e&sub1; = 0
  • e&sub2; = 36
  • e&sub0; ist die interessierende rechte Kantenvariable für das Anfangspixel, da die Vertikalposition der Abtastung über (14,11) liegt - der Stelle, an der sich die beiden rechten Kanten treffen. Die Variable e&sub1; ist die einzige linke Kantenvariable und wird so zum Prüfen jedes Pixels benutzt. Für das Anfangspixel ist die linke Kantenvariable nicht negativ und so wird dieses Pixel nicht eingeordnet.
  • Bei einem Einzelpixel-Verfahren bewegt sich der Durchquerungs- Algorithmus zu einem anderen Pixel, errechnet die Werte der Kantenvariablen bei diesem Pixel und führt die Prüfung aus, um zu überprüfen, ob es innerhalb der Dreieckbegrenzungen liegt. Eine Bewegung von Pixel zu Pixel während der Durchquerung wird als "Schreiten" bezeichnet. Das nächste Pixel bei der Durchquerung ist üblicherweise zu dem vorherigen Pixel benachbart, was die Bewertung der Kantenvariablen vereinfacht. Ein Bestimmen des Wertes der Kantenvariablen bei einem benachbarten Pixel ist eine Sache des Addierens einer Konstante zu den gegenwärtigen Werten, da die Kantenfunktionen linear sind. Diese Konstanten werden als Zuwachswerte oder Schrittwerte bezeichnet. Die Zuwachswerte für einen Schritt in der Horizontalrichtung sind immer ± 1, da die Kantenvariable als der horizontale Abstand zwischen dem Pixel und der Kante definiert ist. Die Zuwachswerte für einen Schritt in der vertikalen Richtung werden ± m sein, wenn die Kantenfunktionen der vorstehend benutzten Form vorhanden ist: f(y) = my + c. Für das Beispieldreieck werden die Zuwachswerte für jede Kantenvariable wie folgt:
  • In unserem Beispiel werden wir die Durchquerungs-Algorithmus- Schritte (5,3) annehmen bei dem Pixel unter dem gegenwärtigen. Der neue Wert der Kantenvariablen wird dann wie folgt:
  • e&sub0; = e&sub0; + &Delta;e0ab = 1
  • e&sub1; = e&sub1; + &Delta;e1ab = -0,231
  • e&sub2; = e&sub2; + &Delta;e2ab = 66.
  • Für Pixel (5,3) ist die linke Kantenvariable e&sub1; negativ und die rechte Kantenvariable e&sub0; nichtnegativ. Das bedeutet, daß das Pixel sich innerhalb der Dreiecksgrenzen befindet und eingeordnet wird.
  • Die Durchquerung setzt das Schreiten von Pixel zu Pixel fort, wobei die entsprechenden Zuwachswerte den Kantenvariablen hinzugefügt und die Werte für die linken und rechten Begrenzungen geprüft werden. Das muß mindestens für jedes Pixel im Dreieck geschehen. Die Gesamtanzahl der durchquerten Pixel hängt dann von dem Wirkungsgrad des betreffenden benutzten Durchquerungs-Algorithmus ab.
  • Pixel-Spannen-Verfahren
  • Das Pixel-Spannen-Verfahren ist gleichartig zu dem Einzelpixel- Verfahren, erlaubt jedoch das Ausführen des Einordnungstests für mehrere Pixel aufgrund einer Bewertung der Kantenvariablen. Das Verfahren arbeitet an Pixeln, die in horizontale Spannen mit w Bit Breite gruppiert sind (das Beispiel benutzt w=4). Diese Technik deutet Kantenvariablen und Zuwachswerte in der gleichen Weise wie das Einzelpixel-Verfahren, jedoch schreitet der Durchquerungs-Algorithmus horizontal in Einheiten der Größe w weiter, so daß die Links/Rechts-Zuwachswerte statt ±1 nun ±w betragen.
  • Beim Bestimmen, welche Pixel eingeordnet werden sollen, wird die Maskenerzeugungseinheit 720 benutzt, um zu bezeichnen, welche Pixel in einer Spanne einzuordnen sind. Diese Information wird durch eine Maske von w Bits repräsentiert; eine Eins bezeichnet, daß das Pixel einzuordnen ist, eine Null bezeichnet, daß es nicht einzuordnen ist. Die Maske repräsentiert Pixel (w,y) bis (x+w-1,y). Wie vorstehend diskutiert, ist die Berechnung der Einordnungsmaske das Ergebnis des logischen UND von Masken, die für das betreffende Pixel geltende linke und rechte Kante erzeugt werden.
  • Die Maskenerzeugung benutzt die Binär-Repräsentation der Kantenvariablen, wie durch die vorstehenden Tabellen 1 und 2 gezeigt wird. In den Tabellen sind die Teilspannen-Positionsbits diß n geringstwertigen Bits der Binärdarstellung des ganzzahligen Teils der Kantenvariablen, wobei w=2n. Die Spannenpositionsbits sind die restlichen Bits außer dem Vorzeichenbit. Das Vorzeichenbit ist das im Zweierkomplement-Format definierte Bit höchster Mächtigkeit.
  • Ein Durchquerungs-Algorithmus für das Pixel-Spannen-Verfahren verhält sich grundsätzlich in der gleichen Weise, wie es bei Benutzung des Einzelpixel-Verfahrens der Fall ist. Zwei Unterschiede sind darin zu sehen, daß der Pixel-Spannen-Durchquerungs-Algorithmus sich horizontal in Schritten von w Pixeln bewegt, und die Ausgangs-x-Position muß ein Vielfaches von w sein. Unter Beachtung von diesem wird wiederum das in Fig. 9 gezeigte Beispielsdreieck betrachtet. Nun beginnt der Durchquerungs-Algorithmus beim Pixel (4,2) (wie durch ein X in Fig. 9 bezeichnet), da 4 ein Vielfaches von w ist. Die Werte der Kantenvariablen sind wie folgt:
  • e&sub0; = 1,
  • e&sub1; = 1,
  • e&sub2; = 37.
  • Unter Benutzung der Tabellen 1 und 2 bestimmen wir die Maske für die linke Kantenvariable e&sub0; zu 0011 und die rechte Kantenvariable e&sub1; zu 1100. Das logische UND dieser beiden Masken ist 0000, und es sind deshalb keine Pixel einzuordnen.
  • Der Durchquerungs-Algorithmus schreitet nun eine Spanne zum Pixel (4,3) herab. Die neuen Werte für die interessierenden Kantenvariablen sind dann e&sub0;=2 und e&sub1;=0,769. Das ergibt die jeweiligen linken und rechten Masken 1110 bzw. 0111. Das logische UND davon ist 0110, so daß die Pixel (4,3) und (7,3) nicht eingeordnet werden, da die Werte für diese Pixel in der Maske Null sind. Jedoch werden die Pixel (5,3) und (6,3) eingeordnet, da die Werte für diese Pixel in der Maske Eins sind.
  • Dieses Pixel-Spannen-Verfahren besitzt Vorteile gegenüber der Einzelpixel-Technik, da weniger arithmetische Vorgänge pro eingeordnetem Pixel nötig sind. Die vorstehend beschriebene Einzelpixel-Technik erfordert drei Additionsvorgänge pro Pixel bei dem Fortschreiten des Durchquerungs-Algorithmus. (Es ist möglich, dies für einige Pixel zu reduzieren, wenn der Durchquerungs-Algorithmus so ist, daß er alle Pixel einordnet, die e&sub0; als rechte Kante benutzen, bevor irgendwelche Pixel eingeordnet werden, die e&sub2; als die rechte Kante benutzen (die "untere Hälften des Dreiecks). Wenn die untere Hälfte eingeordnet wird, braucht e&sub0; nicht mehr aktualisiert zu werden, so daß nur zwei Vorgänge pro Pixel erforderlich sind. Jedoch ist die Erhöhung des Wirkungsgrades bei einer tatsächlichen Verwirklichung von Graphik-Hardware nicht immer dieser hinzugefügten Komplexheits-Wert.) Bei Benutzung des Pixel-Spannen-Verfahrens werden die Kantenvariablen nur einmal für jeweils w Pixel aktualisiert. Das wird mit Hilfe der Maskenerzeugungseinheit 720 vollbracht, welche die eine Pixelspanne repräsentierenden Maskenwerte erzeugt. Diese Funktionseinheit kann, wie für den Fachmann ersichtlich, unter Benutzung von einfacher Kombinationslogik leicht ausgeführt werden.
  • Die vorliegende Erfindung kann mit dem vorstehend beschriebenen Polygonraster-Verfahren auch eine Fensterabschneide-Routine integrieren. Fig. 12 zeigt ein Beispiel eines Fensters 1210 und eines Dreiecks 1220, bei dem eine fenstergebundene Maskenerzeugungsroutine angewendet wird. Bei dem gezeigten Beispiel liegt ein Teil des Dreiecks 1220 außerhalb des Fensters 1210, und nur solche Abschnitte des Dreiecks, die innerhalb des Fensters liegen, müssen eingeordnet werden. Um zu bestimmen, ob die Pixelspanne 1230 sich innerhalb des Fensters 1210 befindet, wird eine separate Maske für die Kanten des Fensters 1210 erzeugt. Bei dem in Fig. 12 gezeigten Beispiel wird je eine Maske für die Kanten 1240 und 1250 erzeugt. Diese Masken werden dann mit der für das Dreieck 1220 erzeugten Einordnungsmaske geundet. Die sich ergebende fenstergebundene Maske repräsentiert, welche Pixel innerhalb der Spanne 1230 eingeordnet werden.
  • Schließlich kann Hardware für komplexere Polygone generalisiert werden. Die komplexen Polygone können in einfachere Polygone oder Dreiecke aufgebrochen werden. Mehrfach-Kantensätze können zum Rastern der Polygone benutzt werden. Insbesondere werden zusätzliche Masken für jede Kante des Polygons erzeugt und die sich ergebenden Masken werden miteinander geundet. Alternativ können die komplexen Polygone in mehrere Dreiecke aufgebrochen und durch die Polygonraster-Hardware durchgeleitet werden.

Claims (10)

1. Computergestütztes Verfahren zum Bestimmen, welche Pixel als ein Teil eines Dreieckes einzuordnen sind, um Polygone zu rastern, welches Verfahren die Schritte umfaßt:
(1) Erzeugen von drei Kantenvariablen für die drei Kanten des Dreieckes, welche bezeichnen, ob ein erstes Pixel innerhalb oder außerhalb eines Dreieckes liegt, wobei die drei Kantenvariablen den mit Vorzeichen bewerteten Abstand zwischen dem ersten Pixel und jeweils einer der drei Kanten des Dreieckes repräsentieren;
(2) Erzeugen von drei Masken aufgrund der Werte der Kantenvariablen, welche Masken für eine Pixelspanne repräsentativ sind, bei denen das erste Pixel das Anfangspixel in der Pixeispanne ist; und
(3) logisches UNDen der drei Masken zum Erzeugen einer Einordnungsmaske, welche repräsentiert, welche Pixel innerhalb der Pixelspanne eingeordnet werden sollen.
2. Verfahren nach Anspruch 1, das weiter umfaßt die Schritte des Durchquerens des Dreieckes zu einem nächsten Pixel, das nach der Pixelspanne gelegen ist; Hinzufügen eines Zuwachswertes zu jeder der Kantenvariablen; und Wiederholen der Schritte (2) und (3).
3. Verfahren nach Anspruch 1 oder 2, bei dem die Einordnungsmaske, die aus einer Kette von W Bits besteht, ein Einordnungsmasken-Bit für das Pixel in der Position (x,y) und Einordnungsmasken-Bits für die nächsten W-1 Pixel in der horizontalen Zeile besitzt.
4. Verfahren nach mindestens einem der Ansprüche 1 bis 3, bei dem jede Kantenvariable ein Vorzeichen-Bit, Spannenpositions-Bits und Teilspannenpositions-Bits enthält.
5. Verfahren nach mindestens einem der Ansprüche 1 bis 4, bei dem die Anzahl von Pixeln in der Pixelspanne eine Potenz von zwei ist.
6. Computergestütztes System zum Bestimmen, welche Pixel als Teil eines Dreieckes einzuordnen sind, um Polygone zu rastern, welches System umfaßt:
(a) einen Ganzzahlen-Datenweg (710) mit einer Vielzahl von Registern und mindestens einer. Addier/Subtrahier-Einheit, wobei der Ganzzahlen-Datenweg (710) konfiguriert ist zur Erzeugung von drei Kantenvariablen, von denen jede anzeigt, ob ein erstes Pixel innerhalb oder außerhalb eines Dreiekkes liegt, und die drei Kantenvariablen den mit Vorzeichen versehenen Abstand zwischen dem ersten Pixel und der jeweiligen der drei Kanten des Dreieckes repräsentieren;
(b) eine Pixelmasken-Erzeugungseinheit (720), die ausgelegt ist, die drei Kantenvariablen von dem Ganzzahlen-Datenweg (710) anzunehmen, welche Pixelmasken-Erzeugungseinheit (720) weiter ausgelegt ist zum Erzeugen von drei Masken aus den drei Kantenvariablen, welche drei Masken für eine Pixelspanne repräsentativ sind, bei der das erste Pixel das Anfangspixel in der Pixelspanne ist, wobei die drei Masken logisch geundet werden zum Erzeugen einer Einordnungsmaske, welche anzeigt, welche Pixel innerhalb der Pixelspanne als ein Teil des Dreieckes einzuordnen sind; und
(c) eine Einordnungseinheit (730), welche die Einordnungsmaske von der Pixelmasken-Erzeugungseinheit (720) nimmt und für jedes Pixel Befehle, ob es als Teil des Dreieckes einzuordnen ist oder nicht, zu einem Speichersystem ausgibt.
7. System nach Anspruch 6, bei dem die Pixelmasken-Erzeugungseinheit (720) Maskierungsmittel zum Erzeugen von drei Masken aufgrund der Werte der Kantenvariablen umfaßt, welche Masken für eine Pixelspanne repräsentativ sind; und Mittel (730) zum logischen UNDEN der drei Masken zum Erzeugen einer Einordnungsmaske, welche repräsentiert, welche Pixel innerhalb der Pixelspanne in das Dreieck eingeordnet werden sollen.
8. System nach Anspruch 7, bei dem das Maskierungsmittel (720) eine Nachschautabelle umfaßt, welche in Abhängigkeit von dem Wert der Kantenvariablen unterschiedliche Masken schafft.
9. System nach mindestens einem der Ansprüche 6 bis 8, bei dem die Pixelspanne Datenblöcken entspricht, auf die durch das Speichersystem zugegriffen wird.
10. System nach mindestens einem der Ansprüche 6 bis 10, bei dem die Kantenvariablen den mit Vorzeichen versehenen horizontalen Abstand zwischen einem bestimmten Pixel und einer der Kanten des Dreieckes repräsentieren.
DE69312505T 1992-10-30 1993-10-12 Polygonaufrasterung Expired - Lifetime DE69312505T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US07/968,901 US5446836A (en) 1992-10-30 1992-10-30 Polygon rasterization
PCT/US1993/009754 WO1994010647A1 (en) 1992-10-30 1993-10-12 Polygon rasterization

Publications (2)

Publication Number Publication Date
DE69312505D1 DE69312505D1 (de) 1997-09-04
DE69312505T2 true DE69312505T2 (de) 1997-11-06

Family

ID=25514914

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69312505T Expired - Lifetime DE69312505T2 (de) 1992-10-30 1993-10-12 Polygonaufrasterung

Country Status (6)

Country Link
US (1) US5446836A (de)
EP (1) EP0667018B1 (de)
JP (1) JP3356779B2 (de)
KR (1) KR950704750A (de)
DE (1) DE69312505T2 (de)
WO (1) WO1994010647A1 (de)

Families Citing this family (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100243174B1 (ko) * 1993-12-28 2000-02-01 윤종용 서브픽셀 마스크 발생방법 및 장치
TW304254B (de) * 1994-07-08 1997-05-01 Hitachi Ltd
TW293899B (de) * 1994-10-18 1996-12-21 Seiko Epson Corp
FR2735267B1 (fr) * 1995-06-08 1999-04-30 Hewlett Packard Co Systeme et procede de convertisseur de balayage de triangles a tampons de trame entrelaces en deux dimensions
US5758128A (en) * 1996-06-27 1998-05-26 Cirrus Logic, Inc. Object referenced memory mapping
US6034699A (en) * 1997-05-01 2000-03-07 Ati Technologies, Inc. Rendering polygons
US6141463A (en) * 1997-10-10 2000-10-31 Electric Planet Interactive Method and system for estimating jointed-figure configurations
US6611272B1 (en) * 1998-07-02 2003-08-26 Microsoft Corporation Method and apparatus for rasterizing in a hierarchical tile order
US7224364B1 (en) * 1999-02-03 2007-05-29 Ati International Srl Optimal initial rasterization starting point
US6421053B1 (en) * 1999-05-24 2002-07-16 International Business Machines Corporation Block rendering method for a graphics subsystem
US6407736B1 (en) 1999-06-18 2002-06-18 Interval Research Corporation Deferred scanline conversion architecture
US6795072B1 (en) * 1999-08-12 2004-09-21 Broadcom Corporation Method and system for rendering macropixels in a graphical image
US6504542B1 (en) * 1999-12-06 2003-01-07 Nvidia Corporation Method, apparatus and article of manufacture for area rasterization using sense points
US7027650B2 (en) * 1999-12-10 2006-04-11 Christian Williame Dynamic computing imagery, especially for visceral osteopathy and for articular kinetics
WO2001043047A2 (en) * 1999-12-10 2001-06-14 Christian Williame Dynamic computing imagery for visceral osteopathy and for articular kinetics
US20050052459A1 (en) * 2000-06-07 2005-03-10 Lewis Michael C. Method and system for rendering macropixels in a graphical image
US6636218B1 (en) * 2000-06-30 2003-10-21 Intel Corporation Title-based digital differential analyzer rasterization
US6556203B1 (en) * 2000-06-30 2003-04-29 Intel Corporation Tile-based digital differential analyzer rasterization
US7126600B1 (en) * 2000-08-01 2006-10-24 Ati International Srl Method and apparatus for high speed block mode triangle rendering
US6784894B2 (en) * 2000-08-24 2004-08-31 Sun Microsystems, Inc. Mapping time-sorted to direction-sorted triangle vertices
US7061507B1 (en) * 2000-11-12 2006-06-13 Bitboys, Inc. Antialiasing method and apparatus for video applications
US6900800B2 (en) * 2001-02-27 2005-05-31 David Robert Baldwin Tile relative origin for plane equations
US7081903B2 (en) * 2001-12-12 2006-07-25 Hewlett-Packard Development Company, L.P. Efficient movement of fragment stamp
KR100487461B1 (ko) * 2002-07-31 2005-05-03 학교법인연세대학교 타일링 트래버설 방식의 주사변환 유닛
US7800631B2 (en) * 2003-03-18 2010-09-21 Qualcomm Incorporated Triangle rendering using direct evaluation
US20060204616A1 (en) * 2003-04-15 2006-09-14 Novozymes A/S Tea production process
US8775997B2 (en) 2003-09-15 2014-07-08 Nvidia Corporation System and method for testing and configuring semiconductor functional circuits
US8872833B2 (en) * 2003-09-15 2014-10-28 Nvidia Corporation Integrated circuit configuration system and method
US8732644B1 (en) 2003-09-15 2014-05-20 Nvidia Corporation Micro electro mechanical switch system and method for testing and configuring semiconductor functional circuits
US8711161B1 (en) 2003-12-18 2014-04-29 Nvidia Corporation Functional component compensation reconfiguration system and method
US7551174B2 (en) * 2003-12-23 2009-06-23 Via Technologies, Inc. Method and apparatus for triangle rasterization with clipping and wire-frame mode support
US7139997B1 (en) * 2004-05-11 2006-11-21 Altera Corporation Method and system for checking operation of a mask generation algorithm
FR2865563B1 (fr) * 2004-06-17 2006-03-17 Raphael Lemoine Procede et dispositif de remplissage d'une forme geometrique
US8723231B1 (en) 2004-09-15 2014-05-13 Nvidia Corporation Semiconductor die micro electro-mechanical switch management system and method
US8711156B1 (en) 2004-09-30 2014-04-29 Nvidia Corporation Method and system for remapping processing elements in a pipeline of a graphics processing unit
US7555163B2 (en) * 2004-12-16 2009-06-30 Sony Corporation Systems and methods for representing signed distance functions
US7362325B2 (en) * 2004-12-21 2008-04-22 Qualcomm Incorporated 2D/3D line rendering using 3D rasterization algorithms
US20060235610A1 (en) * 2005-04-14 2006-10-19 Honeywell International Inc. Map-based trajectory generation
US8427496B1 (en) 2005-05-13 2013-04-23 Nvidia Corporation Method and system for implementing compression across a graphics bus interconnect
US8698811B1 (en) 2005-12-15 2014-04-15 Nvidia Corporation Nested boustrophedonic patterns for rasterization
US9117309B1 (en) 2005-12-19 2015-08-25 Nvidia Corporation Method and system for rendering polygons with a bounding box in a graphics processor unit
US8390645B1 (en) 2005-12-19 2013-03-05 Nvidia Corporation Method and system for rendering connecting antialiased line segments
JP4621617B2 (ja) * 2006-03-28 2011-01-26 株式会社東芝 図形描画装置、図形描画方法、及びプログラム
US8928676B2 (en) * 2006-06-23 2015-01-06 Nvidia Corporation Method for parallel fine rasterization in a raster stage of a graphics pipeline
KR100762811B1 (ko) 2006-07-20 2007-10-02 삼성전자주식회사 하프 플레인 에지 함수를 이용한 타일 비닝 방법 및 시스템
US8427487B1 (en) 2006-11-02 2013-04-23 Nvidia Corporation Multiple tile output using interface compression in a raster stage
US8237738B1 (en) 2006-11-02 2012-08-07 Nvidia Corporation Smooth rasterization of polygonal graphics primitives
US8139058B2 (en) * 2006-11-03 2012-03-20 Vivante Corporation Hierarchical tile-based rasterization algorithm
US8482567B1 (en) * 2006-11-03 2013-07-09 Nvidia Corporation Line rasterization techniques
US8724483B2 (en) * 2007-10-22 2014-05-13 Nvidia Corporation Loopback configuration for bi-directional interfaces
US9064333B2 (en) * 2007-12-17 2015-06-23 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US8780123B2 (en) * 2007-12-17 2014-07-15 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
KR100954638B1 (ko) * 2008-04-03 2010-04-27 재단법인서울대학교산학협력재단 벡터 그래픽스 래스터라이제이션 방법
US8681861B2 (en) * 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
US8923385B2 (en) * 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
JP5151946B2 (ja) * 2008-12-09 2013-02-27 富士通株式会社 描画装置
US20110063306A1 (en) * 2009-09-16 2011-03-17 Nvidia Corporation CO-PROCESSING TECHNIQUES ON HETEROGENEOUS GPUs INCLUDING IDENTIFYING ONE GPU AS A NON-GRAPHICS DEVICE
US9530189B2 (en) 2009-12-31 2016-12-27 Nvidia Corporation Alternate reduction ratios and threshold mechanisms for framebuffer compression
US9331869B2 (en) 2010-03-04 2016-05-03 Nvidia Corporation Input/output request packet handling techniques by a device specific kernel mode driver
US8378319B2 (en) * 2010-03-22 2013-02-19 Taiwan Semiconductor Manufacturing Company, Ltd. System and method for generating direct-write pattern
JP5273087B2 (ja) * 2010-04-14 2013-08-28 株式会社Jvcケンウッド 映像処理装置および映像処理方法
US9171350B2 (en) 2010-10-28 2015-10-27 Nvidia Corporation Adaptive resolution DGPU rendering to provide constant framerate with free IGPU scale up
CN102486870B (zh) * 2010-12-01 2014-02-12 财团法人资讯工业策进会 绘图系统及其像素更新方法
US8860742B2 (en) 2011-05-02 2014-10-14 Nvidia Corporation Coverage caching
US9607407B2 (en) 2012-12-31 2017-03-28 Nvidia Corporation Variable-width differential memory compression
US9591309B2 (en) 2012-12-31 2017-03-07 Nvidia Corporation Progressive lossy memory compression
US9710894B2 (en) 2013-06-04 2017-07-18 Nvidia Corporation System and method for enhanced multi-sample anti-aliasing
US9501859B2 (en) 2013-07-19 2016-11-22 Adobe Systems Incorporated Triangle rasterization
US9832388B2 (en) 2014-08-04 2017-11-28 Nvidia Corporation Deinterleaving interleaved high dynamic range image by using YUV interpolation
US10410081B2 (en) * 2014-12-23 2019-09-10 Intel Corporation Method and apparatus for a high throughput rasterizer
CN109346028B (zh) * 2018-11-14 2021-03-23 西安翔腾微电子科技有限公司 一种基于tlm的三角形光栅化扫描结构
US10692271B1 (en) * 2018-12-13 2020-06-23 Advanced Micro Devices, Inc. Robust ray-triangle intersection

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4962468A (en) * 1987-12-09 1990-10-09 International Business Machines Corporation System and method for utilizing fast polygon fill routines in a graphics display system
JPH0760465B2 (ja) * 1989-10-23 1995-06-28 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン 凹ポリゴン描出方法及びプロセツサ
US5187658A (en) * 1990-01-17 1993-02-16 General Electric Company System and method for segmenting internal structures contained within the interior region of a solid object

Also Published As

Publication number Publication date
US5446836A (en) 1995-08-29
EP0667018B1 (de) 1997-07-23
JPH08502845A (ja) 1996-03-26
WO1994010647A1 (en) 1994-05-11
EP0667018A1 (de) 1995-08-16
KR950704750A (ko) 1995-11-20
JP3356779B2 (ja) 2002-12-16
DE69312505D1 (de) 1997-09-04

Similar Documents

Publication Publication Date Title
DE69312505T2 (de) Polygonaufrasterung
DE69428491T2 (de) Bildlinse
DE69221414T2 (de) Intelligenter Schriftartdarstellungskoprozessor
DE68927471T2 (de) Verfahren zur Schattierung eines graphischen Bildes
DE69129712T2 (de) Arbeitsraumanzeigen
DE3750784T2 (de) Generation eines intrapolierten charakteristischen Wertes zur Anzeige.
DE69534558T2 (de) Effizientes Verfahren, Gerät und Rechnerprogramm zur Auswertung graphischer Programmiersprache
DE69032932T2 (de) System und Verfahren zum unverfälschten Polygonenzeichnen
DE69626394T2 (de) Verfahren und vorrichtung zur verminderung des speicherbedarfs für anzeigedaten
DE68923227T2 (de) Vektor-zu-Raster-Umwandlungsverfahren.
DE69831385T2 (de) Verfahren und Anordnung zum Mischen von graphischen Objekten mit Planarkarten
DE69331871T2 (de) Verfahren und Vorrichtung zur Datenverarbeitung für ein Bildschirmgerät mit reduzierten Pufferspeichersforderungen
DE69100140T2 (de) Verfahren zur Anzeige eines Bildteiles einer physikalischen Struktur.
DE68919024T2 (de) Verfahren und Prozessor zur Abtastumsetzung.
DE3689271T2 (de) Verfahren zur Bildanzeige.
EP1227444B1 (de) Verfahren zur Rasterisierung eines Graphikgrundelements
DE69131927T2 (de) Verfahren und gerät um verfälschte polygone darzustellen
DE69130132T2 (de) Verfahren zur Erzeugung von Adressen zu texturierten, in RIP Maps gespeicherten graphischen Primitiven
DE60032832T2 (de) Darstellung einer gekrümmten Oberfläche in mehreren Auflösungen
DE19709220B4 (de) System und Verfahren für eine beschleunigte Verdeckungsauslese
DE69322575T2 (de) Verfahren und Gerät zur Wiedergabe von abgeglichenen NURB Oberflächen
DE69423129T2 (de) System und Verfahren zur Kurvendarstellung
DE69624868T2 (de) Computergraphiksystem mit leistungsfähiger Vorverarbeitung des Clippings von Primitiven
DE69535098T2 (de) Verfahren und -vorrichtung zur Suche von Bildern in einer Datenbank
DE69826044T2 (de) Vektorkartenplanarisierung und -einfang

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
R082 Change of representative

Ref document number: 667018

Country of ref document: EP

Representative=s name: PATENTANWAELTE RUFF, WILHELM, BEIER, DAUSTER & PAR