DE102007037033A1 - Verfahren und Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, insbesondere auf einem grafischen Bildschirm - Google Patents

Verfahren und Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, insbesondere auf einem grafischen Bildschirm Download PDF

Info

Publication number
DE102007037033A1
DE102007037033A1 DE200710037033 DE102007037033A DE102007037033A1 DE 102007037033 A1 DE102007037033 A1 DE 102007037033A1 DE 200710037033 DE200710037033 DE 200710037033 DE 102007037033 A DE102007037033 A DE 102007037033A DE 102007037033 A1 DE102007037033 A1 DE 102007037033A1
Authority
DE
Germany
Prior art keywords
void
points
triangle
network
point
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.)
Withdrawn
Application number
DE200710037033
Other languages
English (en)
Inventor
Helmut Prof. Dr. Dohmann
Rumen Prof. Dr. Stainov
Matthias Schwinn
Robert Zöller
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.)
HOCHSCHULE FULDA
Original Assignee
HOCHSCHULE FULDA
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 HOCHSCHULE FULDA filed Critical HOCHSCHULE FULDA
Priority to DE200710037033 priority Critical patent/DE102007037033A1/de
Priority to PCT/DE2008/001295 priority patent/WO2009018820A2/de
Publication of DE102007037033A1 publication Critical patent/DE102007037033A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/05Geographic models
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09BEDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
    • G09B29/00Maps; Plans; Charts; Diagrams, e.g. route diagram
    • G09B29/12Relief maps

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Remote Sensing (AREA)
  • Computer Graphics (AREA)
  • Mathematical Physics (AREA)
  • Business, Economics & Management (AREA)
  • Educational Administration (AREA)
  • Educational Technology (AREA)
  • Processing Or Creating Images (AREA)
  • Image Generation (AREA)

Abstract

Verfahren und Computersystem zur dreidimensionalen Darstellung einer in Form einer Höhenkarte zur Verfügung gestellten Landschaft in Echtzeit auf einem zur Ausgabe von dreidimensionalen Darstellungen fähigen Ausgabegerät unter Anwendung eines Rechners, einer Grafikkarte und einer Anwendung, die Verfahrensvorschriften einschließlich Sichtbarkeitskriterien zur Verarbeitung von die Höhenkarte bildenden Höhenpunkten festlegt. Das Verfahren enthält die Bildung eines RTIN aus rechtwinkligen Dreiecken und durch diese gebildeten Diamanten, wobei das RTIN über eine Datenstruktur verwaltet wird. Eine Verfeinerung oder Vereinfachung des gebildeten RTIN kann erfolgen durch Teilung von Dreiecken oder durch Zusammenführung von vier Dreiecken eines Diamanten zu zwei Dreiecken unter Entfernung des Mittelpunkts des Diamanten. Außerdem werden durch die Anwendung Vertexpunkte berechnet, die den im resultierenden RTIN enthaltenen Netzpunkten zugeordnet sind, die die von der Grafikkarte zur Darstellung der Landschaft benötigten Informationen enthalten und im Grafikspeicher der Grafikkarte gespeichert werden. Erfindungsgemäß werden die für den Aufbau des RTIN verwendeten Netzpunkte über Indexwerte (Adressen) verwaltet, wobei, ausgehend von der Höhenkarte, eine Startkonfiguration gebildet wird, die die minimale Menge von Höhenpunkten festlegt, die zur Bildung eines die gesamte Höhenkarte umfassenden, von T-Stellen freien RTIN benötigt werden. Die Vertexpunkte der im RTIN enthaltenen ...

Description

  • Die Erfindung betrifft ein Verfahren der im Oberbegriff des Anspruchs 1 angegebenen Gattung und ein Computersystem nach dem Obergriff des Anspruchs 22.
  • Ausgangspunkt für die grafische Darstellung von Landschaften ist eine Höhenkarte, die im Speicher eines Computersystems gespeichert ist oder von einem Massenspeicher, z. B. einer CD, in das Computersystem eingelesen werden kann. Als Speicher können dabei der Hauptspeicher des Computersystems, aber auch externe Speichermedien, wie z. B. Disketten, Festplatten, externe elektronische Speicher, CD, DVD oder optische Speichermedien usw. verwendet werden. Ausgehend von dieser Höhenkarte wird mittels der Grafikhardware (GPU) die dreidimensionale Grafik auf dem Computerbildschirm dargestellt. Die Höhenkarte ist dabei eine Funktion, die einem Koordinatentupel t einen Höhenpunkt h(t) zuordnet: t → h(t) mit t ∊ D, h(t) ∊ W (1)mit
    D := Menge der Koordinatentupel
    W := Menge der Höhenpunkte.
  • Die Menge D wird von der Anwendung des Computersystems bzw. Programms frei gewählt. Beispielsweise kann die Definitionsmenge der Höhenkarten-Funktion folgendermaßen definiert werden: D1 := {R × R} oder D2 := {R × R × R) (2)mit
    R := Menge der reellen Zahlen.
  • Die erste Variante stellt eine zweidimensionale Höhenkarte dar; solche Höhenkarten werden oft als Bilder zur Verfügung gestellt; das Koordinatentupel verweist dann auf einen Pixel des Bildes. Die Pixel dieser Bilder speichern dabei die Höhenpunkte in kodierter Form (zum Beispiel Grauschattierungen, die die Höhe des Höhenpunkts in Meter angeben).
  • Die zweite Variante ist eine dreidimensionale Höhenkarte: Hier werden dreidimensionale Vektoren benutzt, um beispielsweise auf eine Cubemap Textur zuzugreifen oder als Eingabewerte für eine prozedurale Generierung der Höhenwerte zu dienen [5, 24].
  • Aus Gründen der Zweckmäßigkeit bei der Implementierung reduziert man die Definitionsmenge D der Höhenkarte auf diskrete Werte aus einem festgelegten Bereich der natürlichen Zahlen N0 (N0 = Menge der natürlichen Zahlen erweitert um die Menge mit dem Element „0" (N0 = N ∪ {0}; N = Menge der natürliche Zahlen)). Die Definition einer solchen diskreten zweidimensionalen Höhenkarte lautet: Dd := {{i ∊ N0|0 ≤ i ≤ imax) × {j ∊ N0| 0 ≤ j ≤ jmax}} (3)mit
    imax ∊ N0, jmax ∊ N0.
  • Programmtechnisch lassen sich so definierte, zweidimensionale Höhenkarten als zweidimensionale Felder (Arrays) realisieren. Ohne Beschränkung der Allgemeinheit kann man den Definitionsbereich für i und j so festlegen, dass imax = 2n, jmax = 2m (n, m ∊ N) gewählt wird. Ohne Beschränkung der Allgemeinheit kann man auch n = m wählen. Dies führt zu einer quadratischen Matrix als Definitionsbereich für die Höhenkarte, wobei jede Seite der Matrix 2n + 1 Koordinatenwerte besitzt. Eine solche diskrete quadratische zweidimensionale Höhenkarte lässt sich wie folgt definieren: Dq := {{i ∊ N0|0 ≤ i ≤ 2n} × {j ∊ N0| 0 ≤ j ≤ 2n)) (4)mit
    n ∊ N0.
  • Die Werte i und j kann man auch als Indizes der Koordinaten auffassen. Bei fast allen Verfahren wird diese Festlegung für die Indexmenge, aus der i und j stammen, verwendet. Die weitere Beschreibung des Verfahrens nimmt als Beispiel Bezug auf eine solche zweidimensionale diskrete Höhenkarte mit n = 2, d. h. eine Höhenkarte mit 5·5 = 25 Höhenpunkten. In 1a, 2, 3a und 3b sind solche zweidimensionalen Höhenkarten dargestellt.
  • Indem man eine bijektive Abbildungsvorschrift definiert, die die Koordinatentupel t einer beliebigen Definitionsmenge D auf Elemente aus Dq abbildet, kann man ohne Beschränkung der Allgemeinheit stellvertretend für beliebige Höhenkarten immer mit einer diskreten quadratischen zweidimensionalen Höhenkarte arbeiten. Eine solche Abbildungsvorschrift kann wie folgt definiert werden: t → k(t) mit t ∊ D, k(t) ∊ Dq tq → k–1(tq) mit tq ∊ Dq, k–1(tq) ∊ D k–1(k(t)) = t, mit t ∊ D. (5)
  • Die Wertemenge W der Höhenkartenfunktion enthält die Höhenpunkte der Höhenkarte. Ein solcher Höhenpunkt w ∊ W enthält Attribute, die u. a. die dritte Dimension eines Objekts beschreiben (räumliche Darstellung). Damit kann man über diese Höhenkarte eine dreidimensionale Darstellung des Objekts (z. B. Landschaft) auf einem Computerbildschirm projizieren. Weitere Attribute können verwendet werden, um zum Beispiel Texturkoordinaten oder Farbwerte anzugeben, mit denen die Oberflächenbeschaffenheit oder die Farbgebung eines Objekts definiert wird. Die Wertemenge W einer Höhenkartenfunktion lässt sich folgendermaßen definieren: W := {A0 × A1 ×...× Am} (6)mit
    A0 := Menge der Ausprägungen des 1. Attributs
    A1 := Menge der Ausprägungen des 2. Attributs
    Am := Menge der Ausprägungen des m-ten Attributs
    m ∊ N.
  • Im einfachsten Fall beschreiben die Attribute eines Höhenpunkts lediglich die Höhe des Höhenpunkts. In diesem Fall wären m = 1 und W = R.
  • Die Höhenkarte beschreibt im einfachsten Fall über einer ebenen Fläche eine dreidimensionale Landschaft, zum Beispiel in einem Computerspiel, bei einer Simulationsaufgabe, in einem Flugsimulator oder bei Anwendungen der virtuellen Realität. Neben ebenen Flächen kann man das Konzept der Höhenkarte auch dazu benutzen, dreidimensional strukturierte Körper wie z. B. Würfel (als Ersatz für die Kugelgeometrie) oder die Kugeloberfläche darzustellen. Bei einem Würfel werden dann die sechs Flächen jeweils durch eine Höhenkarte dargestellt. Bei solchen Approximationen muss man zusätzlich an den Kanten entsprechende Anpassungen (zum Beispiel über Nebenbedingungen wie Stetigkeit) berücksichtigen. Bei einer Kugel werden als Höhenpunkte die Flächennormalen der Kugeloberfläche verwendet.
  • Für die Visualisierung von Höhenkarten auf Computerbildschirmen gibt es zahlreiche Ansätze. Manche Verfahren setzen Techniken wie Voxelspacing [22] oder Point-Based Rendering [20] ein, die meisten bekannten Verfahren jedoch führen eine Triangulierung der Höhenkarte durch, d. h. das dreidimensionale Gebilde (repräsentiert über die Höhenkarte) wird über eine Menge von Dreiecken angenähert. Das hier vorgestellte Verfahren gehört zu letzteren und führt auch eine Triangulierung der Höhenkarte durch. Die Dreiecke der Triangulierung bilden ein zusammenhängendes Netz, das die gesamte Oberfläche der Landschaft abdeckt. Die Visualisierung der Landschaft erfolgt dadurch, dass die Dreiecke des Netzes von der GPU auf dem Bildschirm projiziert und dargestellt werden.
  • Bei der Darstellung des Dreiecknetzes durch die GPU wird ein Eckpunkt eines Dreiecks der Triangulierung über einen so genannten Vertexpunkt definiert. Ein Vertexpunkt enthält ähnlich wie ein Höhenpunkt eine Reihe von Darstellungsattributen. Die Anzahl und Beschaffenheit der verfügbaren Darstellungsattribute wird durch den Typ der verwendeten Grafikkarte bestimmt und ist nicht der Gegenstand des hier beschriebenen Verfahrens. Die Menge der Darstellungsattribute V lässt wie folgt definieren: V := {B0 × B1 ×...× Bp} (7)mit
    B0 := Menge der Ausprägungen des 1. Attributs
    B1 := Menge der Ausprägungen des 2. Attributs
    Bp := Menge der Ausprägungen des p-ten Attributs
    p ∊ N.
  • Die konkreten Ausprägungen der Darstellungsattribute eines Vertexpunkts werden anhand der Attribute eines Höhenpunkts berechnet. Jedem Höhenpunkt der Höhenkarte ist folglich ein Vertexpunkt zugeordnet; nämlich genau der Vertexpunkt, der aus den Attributen des Höhenwertes des Höhenpunkts berechnet wird. Sei v nun eine Abbildung, die jedem Höhenpunkt einen Vertexpunkt zuordnet: h → v(h) mit h ∊ W, v(h) ∊ V (8)mit
    W := Menge der Höhenpunkte
    V := Menge der Vertexpunkte.
  • Im einfachsten Fall entsprechen die Attribute der Höhenpunkte den Darstellungsattributen der Vertexpunkte, d. h. es gilt W = V und v(h) = h, dann sind keine weiteren Berechnungen notwendig. Üblicherweise unterscheiden sich jedoch die Kodierungen der Attribute der Höhenpunkte und die der Darstellungsattribute der Vertexpunkte: Erstere könnten beispielsweise eine Kodierung aufweisen, die den erforderlichen Speicherplatz minimiert, während letztere in einer Form kodiert sein könnten, die der GPU den schnellstmöglichen Zugriff erlaubt.
  • Auf den aus der Triangulierung der Höhenkarte hervorgehenden Dreiecken wird eine Traversierung durchgeführt. Dabei werden die Vertexpunkte der Dreiecke derart gruppiert und angeordnet, dass sie ein so genanntes Grafikprimitiv, oder auch mehrere, bilden. Ein Grafikprimitiv ist eine Kodierung, die eine Menge von Dreiecken durch eine Sequenz von Vertexpunkten beschreibt. Die GPU kann Zeichenbefehle nur in Form von Grafikprimitiven entgegen nehmen, deshalb ist dieser Schritt notwendig. Bei bekannten Verfahren kommen vor allem folgende Grafikprimitive zum Einsatz: Triangle List [9, 32], Triangle Fan [8, 23] und Triangle Strip [10, 26, 34, 37]. Diese Grafikprimitive unterscheiden sich vor allem in der durchschnittlichen Anzahl der Vertexpunkte, die benötigt werden, um ein Dreieck zu beschreiben. Eine Triangle List benötigt beispielsweise drei Vertexpunkte für ein Dreieck, wobei ein Triangle Fan oder ein Triangle Strip annähernd einen Vertexpunkt pro Dreieck benötigt. Aus Gründen der Performanz ist es daher wünschenswert, die Traversierung des Dreiecknetzes derart zu gestalten, dass nach Möglichkeit Triangle Fans bzw. Triangle Strips zum Einsatz kommen. Um die Anzahl der abzusetzenden Zeichenbefehle zu minimieren, ist es weiterhin sinnvoll, die Anzahl der durch ein Grafikprimitiv beschriebenen Dreiecke zu maximieren.
  • Es gibt verschiedene Programmierschnittstellen (API) zur Grafikprogrammierung auf konventionellen Grafikkarten (beispielsweise OpenGL [38], DirectX 9 und DirectX 10 [15]). Diese Verfahren stellen mit ihren Zeichenbefehlen die oben genannten Grafikprimitive zur Verfügung. Die Art und Weise, wie das Grafikprimitiv benannt wird und wie die Sequenz der Vertexpunkte übertragen wird, unterscheidet sich zwar deutlich zwischen den APIs, das Prinzip ist jedoch immer das Gleiche.
  • Beim Absetzen eines Zeichenbefehls hat die Anwendung grundsätzlich zwei Möglichkeiten, die Vertexpunkte des Grafikprimitivs an die GPU zu übertragen:
    • 1. Die Vertexpunkte werden bei jedem Zeichenbefehl in ihrer Gesamtheit übertragen, d. h. sämtliche Darstellungsattribute werden an die GPU übermittelt.
    • 2. Es wird pro Vertexpunkt lediglich ein Indexwert übertragen. Hierfür müssen die Darstellungsattribute im Vorfeld einmalig an die GPU übermittelt und von dieser in einem speziellen Speicher abgelegt worden sein. Der Indexwert identifiziert dabei die Speicherstelle des Vertexpunkts.
  • Im ersten Fall müssen grolle Mengen an Daten an die GPU übermittelt werden, was schnell zu einer Überlastung des Datenbusses führt. Dieses Problem tritt im zweiten Fall nicht auf, da der Speicherbedarf eines Indexwertes wesentlich geringer ist als der Speicherbedarf der Darstellungsattribute eines Vertexpunkts. Höhenpunkte und Vertexpunkte beschreiben mit ihren Attributen und Darstellungsattributen lediglich die Beschaffenheit der darzustellenden Landschaft und enthalten keine Informationen über die Triangulierung der Höhenkarte. Um die Triangulierung der Höhenkarte durchführen zu können, muss eine Datenstruktur existieren. Zum Aufbau der Datenstrukturen werden Netzpunkte definiert. Die Netzpunkte erweitern die Höhen- bzw. Vertexpunkte um Informationen zur Triangulierung. Die Lage der Netzpunkte ist identisch mit den Höhenpunkten, die zum Aufbau des RTIN verwendet werden.
  • Im späteren Verlauf werden bekannte Datenstrukturen vorgestellt und erläutert. Eine solche Datenstruktur definiert Regeln, wie das Dreiecknetz um neue Netzpunkte erweitert wird, wie Netzpunkte entfernt werden und wie die Traversierung der Dreiecke des Netzes durchgeführt wird. Ein Netzpunkt ist dabei mit einem Höhenpunkt und einem Vertexpunkt verbunden, wobei der Vertexpunkt eines Netzpunkts aus dem Höhenpunkt des Netzpunkts berechnet wurde. 1b zeigt den Zusammenhang von Höhen-, Vertex- und Netzpunkten. Die Netzpunkte werden durch Indizes beschrieben. Die Anzahl der Höhenpunkte ist konstant und wird durch den Typ der verwendeten Höhenkarte festgelegt. Die Anzahl der Vertexpunkte entspricht der Anzahl der Höhenpunkte, da aus jedem Höhenpunkt genau ein Vertexpunkt berechnet werden kann. Die Anzahl der Netzpunkte ist variabel und hängt von der Anzahl der verwendeten Dreiecke ab.
  • Das Dreiecknetz, das aus der Triangulierung der Höhenkarte resultiert, wird später bei der Darstellung unter Berücksichtigung der Position und der Blickrichtung des virtuellen Betrachters auf dem Monitor projiziert; dazu werden die Vertexpunkte der Netzpunkte benutzt. Dies führt zur dreidimensionalen Landschaftsvisualisierung und entspricht der Perspektivischen Sicht Das Dreiecknetz wird von den Vertexpunkten aufgespannt, welche dann auf die zweidimensionale Darstellungsfläche (Monitor) projiziert werden.
  • Für die Beschreibung und Klassifizierung von Dreiecknetzen wird gemeinhin die so genannte Draufsicht verwendet. Diese Draufsicht entsteht, indem man ausgehend von einer diskreten zweidimensionalen quadratischen Höhenkarte die Höhenpunkte der Netzpunkte entsprechend ihrer Koordinatentupel aus Dq auf die quadratische Grundfläche der Höhenkarte projiziert. In dieser Sicht wird das Dreiecknetz nun von Höhenpunkten aufgespannt, die auf die Gitterpunkte eines gleichmäßigen quadratischen Gitters ausgerichtet sind.
  • 2, 3a und 3b zeigen jeweils ein Dreiecknetz in der Draufsicht und in der perspektivischen Sicht.
  • Im einfachsten Fall wird bei einer Triangulierung für jeden Höhenpunkt der Höhenkarte 2n × 2m n, m ∊ N ein Netzpunkt erstellt, und diese Netzpunkte werden zu einem Netz von überlappungsfreien Dreiecken verbunden. In der Draufsicht haben diese Dreiecke alle die gleiche Größe. Dieser Ansatz ist gemeinhin unter dem Namen „brute-force approach" bekannt (siehe 2; Spezialfall n = m). Diese Vorgehensweise ist relativ einfach, die verwendeten Grafikkarten sind auf eine solche Vorgehensweise ausgelegt und man erreicht damit beispielsweise konstante Bildwiederholraten. Dabei müssen keine Berechnungen, insbesondere Gleitkommaberechnungen, durchgeführt werden, was zu einem zeitlich deterministischen Verhalten (Echtzeitverhalten) führt. Ein großer Nachteil dieses Vorgehens besteht allerdings darin, dass die Besonderheiten der Detaillierung unberücksichtigt bleiben. Das Dreiecknetz hat immer die gleiche Auflösung, unabhängig davon was dargestellt wird oder wo sich ein Betrachter gerade befindet. Sämtliche Aspekte des LOD (Abk. für „Level of Detail", engl. für „Detaillierungsgrad") [16] bleiben unberücksichtigt, d. h. durch die Vorgehensweise werden immer alle Höhenpunkte der Höhenkarte in der Darstellung berücksichtigt, unabhängig davon, ob diese für die Darstellung wichtig sind oder nicht (siehe 3a und 3b).
  • Die Aspekte des LOD kann man wie folgt zusammenfassen:
    • 1. Mit zunehmender Entfernung zum Betrachter kann der Detaillierungsgrad vermindert werden (d. h. die Anzahl der verwendeten Dreiecke kann verringert werden), ohne die Qualität der grafischen Ausgabe zu verschlechtern; dies setzt voraus, dass durch die Anwendung eine perspektivische Projektionsvorschrift verwendet wird. Dies ist in den meisten Anwendungsfällen gegeben.
    • 2. Die Topologie des darzustellenden Objekts beeinflusst den benötigten Detaillierungsgrad: Einfach strukturierte Oberflächen (zum Beispiel Meer, Salzsee) können mit sehr wenigen Dreiecken ausreichend gut approximiert werden, wobei komplexe Oberflächenstrukturen (beispielsweise Gebirgszüge) nur mit sehr vielen Dreiecken in zufrieden stellendem Maße dargestellt werden können.
  • Ein besonders großer Nachteil des „brute-force approach" besteht darin, dass bei einer Verbesserung der Detaillierung (auch wenn nur einzelne Bereiche der Landschaft detaillierter dargestellt werden sollen) die gesamte Höhenkarte vergrößert werden muss, d. h. es müssen neue Höhenpunkte in Bereichen hinzugefügt werden, wo eine Vergrößerung der Anzahl der Höhenpunkte keine Verbesserung in der Detaillierung erzeugt, z. B. bei ebenen Flächen. Damit steigt auch die Anzahl der Dreiecke, die zur Visualisierung verarbeitet werden müssen, überproportional an. Basierend auf den Leistungsdaten konventioneller Grafikkarten lässt sich zeigen, dass dabei schnell die Grenzen der Leistungsfähigkeit der Grafikkarten überschritten werden [7, 35].
  • Um auf der einen Seite die Detaillierung einer Landschaftsdarstellung zu verbessern und auf der anderen Seite die Landschaftsdarstellung über konventionelle Grafikkarten durchzuführen, führt man in der Praxis, aufbauend auf der bisher geschilderten Höhenkarte, einen weiteren Prozess aus, den man als Simplifizierung bezeichnet. Ziel dieses Prozesses ist es, aus der Menge der Höhenpunkte der Höhenkarte nur diejenigen auszuwählen, die für eine Darstellung bzw. Detaillierung wichtig sind. Für eine Auswahl dieser Höhenpunkte hat eine Anwendung, die basierend auf einer Höhenkarte eine Landschaft visualisieren will, eine Reihe von unterschiedlichen Möglichkeiten [1, 7, 16, 27, 39, 40]. Diese Möglichkeiten sind nicht Gegenstand des hier beschriebenen, erfindungsgemäßen Verfahrens. Das erfindungsgemäße Verfahren setzt die Verwendung eines geeigneten Auswahlverfahrens voraus.
  • Basierend auf den aus einer Höhenkarte ausgewählten, für die Darstellung bzw. für die Detaillierung wichtigen Höhenpunkten wird nun eine Triangulierung durchgeführt, indem nur für die ausgewählten Höhenpunkte Netzpunkte erstellt werden, welche anschließend für die Bildung eines Dreiecknetzes benutzt werden.
  • Die Dreiecke eines so gebildeten Dreiecknetzes haben unterschiedliche Größen und Formen. Ein derartiges Dreiecksnetz bezeichnet man als TIN (Abk. für „triangulated irregular network"). Solche TINs (3a) sind die Grundlage für eine Familie von Visualisierungsalgorithmen [2, 7, 21, 39]. Ein Untermenge der TINs sind Dreiecknetze, bei denen für die zur Triangulierung ausschließlich rechtwinklige Dreiecke unterschiedlicher Größe verwendet (bezogen auf die Draufsicht). Solche Dreiecknetze werden als RTIN (Abk. für „right triangulated irregular network") bezeichnet [31] (3b).
  • Mit Blick auf das im Folgenden beschriebene, erfindungsgemäße Verfahren sollen zum Aufbau des Dreiecknetzes ausschließlich rechtwinklige Dreiecke verwendet werden, d. h. es soll mit den ausgewählten Punkten ein RTIN aufgebaut werden. Die Dreiecke eines RTIN in der Draufsicht haben folgende Eigenschaften: F(d) ∊ {F0/2k|k ∊ N} (9)und
    „d ist rechtwinklig"
    mit
    F0 := Flächeninhalt der Grundfläche der Höhenkarte
    F(d) := Flächeninhalt des Dreiecks d.
  • In den folgenden Darstellungen bildet eine diskrete quadratische zweidimensionale Höhenkarte die Grundlage für die Bildung des RTIN. Das so gebildete RTIN wird außer im erfindungsgemäßen Verfahren auch von anderen Verfahren benutzt [4, 8, 9, 13, 14, 19, 23, 26, 30, 32, 34, 36, 37, 40]. Ähnlich wie bei einem TIN wird bei einem RTIN – bedingt durch das Auswahlverfahren der wichtigsten Höhenpunkte – ein Dreiecknetz aus unterschiedlich großen – jetzt aber rechtwinkligen – Dreiecken gebildet. In 3b ist als Beispiel die Triangulierung für ein RTIN in der Draufsicht auf die Höhenkarte dargestellt.
  • In Verbindung mit unterschiedlich großen, gleichschenkligen Dreiecken zur Approximation der Landschaft tritt das Problem der so genannten T-Stellen auf. Als Beispiel ist in 4 für eine Triangulation einer gegebenen Höhenkarten mit den Netzpunkten A, E, U, Y, M eine T-Stelle dargestellt. Die T-Stelle befindet sich bei Netzpunkt M. Eine T-Stelle ist gegeben, wenn ein Netzpunkt, der für die Bildung eines Dreiecks benötigt wird, auf einer Seite eines anderen von Netzpunkten aufgespannten Dreiecks liegt. Dabei können zwei Situationen eintreten:
    • 1. Der Netzpunkt M liegt nicht auf der Strecke AY. Es kommt zu Darstellungsfehlern, d. h. es entsteht ein Loch, durch das der Hintergrund hindurch scheint (siehe 4).
    • 2. Der Netzpunkt M liegt auf der Strecke AY. Obwohl das Dreiecknetz, mathematisch gesehen, geschlossen ist, wird der Netzpunkt M praktisch nie genau auf der Strecke AY liegen, weil eine exakte Berechnung aufgrund von Rundungsfehlern der von der GPU eingesetzten Fließkommaarithmetik nicht möglich ist. Folglich passen die Kanten AY, AM und MY nicht nahtlos zusammen (siehe 4). Es entstehen minimale Löcher, die sich jedoch als deutlich sichtbare Darstellungsfehler in der grafischen Ausgabe bemerkbar machen.
  • Die T-Stelle wird vermieden, wenn man zusätzliche Dreiecke MUA und MYU bildet und verwendet (siehe 5). Da das erfindungsgemäße Verfahren eine Vorschrift angibt, wie man effizient auf der Basis einer vorgegebenen Höhenkarte ein RTIN aufbaut und verwaltet, soll hier der Aufbau eines regulären RTIN am Beispiel einer Höhenkarte erläutert werden, und zwar auf der Basis von aus dieser Höhenkarte durch die Anwendung selektierten Höhenpunkten, die für die grafische Darstellung wichtig sind. Hierzu wird von einer quadratischen Höhenkarte der Dimension n·n mit n ∊ {2k + 1|k ∊ N0} ausgegangen, wobei im vorgestellten Beispiel k = 2 gewählt wurde. Es sei H die Menge der in dieser Höhenkarte enthaltenen Höhenpunkte. Sei HS die Menge der Höhenpunkte, die von der Anwendung aus dieser Höhenkarte als relevant für die Landschaftsvisualisierung bestimmt wurden. Weiterhin sei HR die Menge der Höhenpunkte, die für den Aufbau eines regulären RTIN erforderlich sind. Dazu gehören zunächst alle Höhenpunkte aus der Menge HS, da entsprechend der Zielsetzung des Verfahrens alle für die Darstellung relevanten Höhenpunkte benutzt werden sollen. Aufgrund der Bildungsvorschrift eines RTIN und der gleichzeitigen Forderung nach T-Stellenfreiheit müssen noch zusätzliche Höhenpunkte benutzt werden, d. h. die Menge HR muss um Höhenpunkte aus der Menge H erweitert werden. Dabei gilt: HS ⊆ HR ⊆ H. Dies bedeutet, dass bei der Konstruktion eines RTIN entweder alle selektierten Höhenpunkte ausreichen, um ein RTIN zu erzeugen, oder zusätzliche Punkte aus der Menge von H hinzugenommen werden müssen, damit keine T-Stellen auftreten, auch wenn diese Punkte später für die grafische Darstellung nicht wichtig sind.
  • Eine Triangulierung als RTIN kann beschrieben werden als die Menge der im RTIN enthaltenen Höhenpunkte HR und die Menge der daraus gebildeten rechtwinkligen Dreiecke T ⊂ {HR × HR × HR}). Ein Höhenpunkt ist genau dann im RTIN enthalten, wenn er den Eckpunkt eines Dreiecks aus T darstellt. In diesem Beispiel stellen die Elemente der Menge HR die Netzpunkte der Triangulation dar, und die Mengen HR und T repräsentieren die Datenstruktur, die das Dreiecknetz speichert.
  • Für eine gültige Triangulierung müssen folgende Bedingungen eingehalten werden:
    • 1. Die Dreiecke in T bedecken überschneidungsfrei die gesamte Fläche der Höhenkarte (in der Draufsicht).
    • 2. Es dürfen keine T-Stellen auftreten.
  • Im Weiteren wird der Aufbau eines gültigen RTIN am Beispiel einer vorgegebenen quadratischen Höhenkarte, die in 7a dargestellt ist, beschrieben. In dieser Höhenkarte ist die Menge der Höhenpunkte gegeben durch H = {A, B, C, ..., Y} (10).
  • Durch die Anwendung wird beispielsweise eine bestimmte Menge von diesen Höhenpunkten durch ein Auswahlverfahren ausgewählt (siehe 7b). HS = {M, O, R, S, W} (11).
  • Das zu dieser Menge HS gehörende reguläre RTIN HR ist in 7c dargestellt. HR = {A, E, K, M, O, Q, R, S, U, W, Y} (12).
  • Um dieses reguläre RTIN auf der Basis der vorgegebenen Höhenkarte und den dazu gehörigen, von der Anwendung ausgewählten Punkte HS zu erzeugen, müssen folgende Schritte durchlaufen werden:
    • 1. Der Aufbau startet, indem das kleinstmögliche reguläre und von T-Stellen freie RTIN auf der Basis der vorgegebenen Höhenkarte (7a) gebildet wird. Dazu werden die vier Eckpunkte A, E, U und Y der Höhenkarte H verwendet. Diese Punkte wurden zwar nicht von der Anwendung ausgewählt, müssen aber trotzdem zum Aufbau eines regulären RTIN mit verwendet werden. Aus diesen vier Höhenpunkten werden zwei rechtwinklige Dreiecke gebildet, die die gesamte Höhenkarte abdecken (siehe 8a). Dieses kleinstmögliche RTIN tritt immer auf, unabhängig davon, wie die Höhenkarte strukturiert ist oder welche Höhenpunkte von der Anwendung für die grafische Darstellung tatsächlich als wichtig selektiert wurden. Die Menge HR ist {A, E, U, Y}, und die Menge der rechtwinkligen Dreiecke T enthält jetzt die Dreiecke EYA und UAY T = {EYA, UAY}. Diese Konfiguration wird im Folgenden als minimales RTIN bezeichnet.
    • 2. Aufbauend auf diesem minimalen RTIN wird jetzt das Dreiecknetz mit den von der Anwendung ausgewählten Höhenpunkten „verfeinert", d. h. es werden Dreieckteilungen durchgeführt. Für das Teilen von rechtwinkligen Dreiecken gilt folgende Regel: Ausgehend von einem im RTIN enthaltenen Dreieck wird die Hypotenuse eines bereits enthaltenen Dreiecks im Verhältnis 1:1 geteilt. Der Höhenpunkt, der dabei als Teilungspunkt in Erscheinung tritt, wird zur Menge HR hinzugefügt. Dies impliziert, dass es nicht möglich ist, einen beliebigen Punkt aus H zum RTIN und damit zur Menge HR hinzuzufügen. Wendet man diese Vorschrift auf das minimale RTIN an, dann existieren nur zwei rechtwinklige Dreiecke, die sich dadurch auszeichnen, dass sie eine gemeinsame Hypotenuse besitzen. Wird die Hypotenuse von beiden Dreiecken im Verhältnis 1:1 geteilt, dann liegt als Höhenpunkt aus der Höhenkarte an diesen Stellen der Punkt M. Dieser Höhenpunkt ist der einzige, der zu einem minimalen RTIN hinzugefügt werden kann. Entweder dieser Punkt gehört zur Menge der selektierten Punkte HS, dann müsste er als selektierter Punkt ohnehin berücksichtigt werden, oder er gehört nicht zu den selektierten Punkten dazu, dann muss er zum regulären Aufbau eines RTIN mit verwendet werden. Über den Punkt M und der Forderung nach T-Stellenfreiheit besteht das reguläre RTIN mit dem Punkt M aus vier rechtwinkligen Dreiecken (siehe 8b). Die Menge HR ist {A, E, M, U, Y}. Die Menge der Dreiecke T ist {MUA, MAE, MEY, MYU}. Auch diese Konfiguration ist noch unabhängig von der Menge der selektierten Punkte. Diese Konfiguration tritt als reguläres RTIN immer auf und wird in dem nachfolgenden beschriebenen, erfindungsgemäßen Verfahren deshalb als Startkonfiguration bezeichnet.
    • 3. Aufbauend auf dieser Startkonfiguration wird jetzt das Dreiecknetz mit den von der Anwendung ausgewählten Höhenpunkten weiter „verfeinert". Dazu führt die Anwendung so lange Dreieckteilungen durch, bis alle ausgewählten Punkte aus HS enthalten sind und die T-Stellenfreiheit des RTIN gewährleistet ist. Als Teilungspunkte kommen, ausgehend von der Startkonfiguration, jetzt nur die Punkte C, K, O und W infrage. In Abhängigkeit von den von der Anwendung selektierten Punkten wird von diesen vier Teilungspunkten einer zum weiteren Aufbau des vollständigen RTIN verwendet. Dabei müssen potentielle T-Stellen erkannt und beseitigt werden. Um das Dreieck zu bestimmen, das als nächstes geteilt werden muss, kann ein beliebiges Dreieck t ∊ T gewählt werden, für das gilt: p ∊ HS ∪ HR mit „p liegt auf t und p ist kein Eckpunkt von t". Dadurch werden immer genau die Dreiecke des RTIN geteilt, die noch nicht detailliert genug sind, d. h. sie umschließen Höhenpunkte aus HS, die noch nicht zum RTIN gehören. Außerdem werden durch diese Vorschrift alle Dreiecke geteilt, auf deren Seiten eine T-Stelle existiert; durch die Teilung werden diese T-Stellen beseitigt. Dieser Vorgang wird so lange wiederholt, bis kein Dreieck aus T dem obigen Kriterium mehr entspricht. Das resultierende RTIN enthält alle Höhenpunkte aus HS und es ist frei von T-Stellen. 6 stellt den Ablauf dar, um ein RTIN gemäß der obigen Beschreibung aufzubauen.
  • Im Beispiel werden folgende Teilungsschritte durchgeführt:
    • 1. Aufbau des minimalen RTIN: T = {UAY, EYA) HR = {A, E, U, V} Siehe 8a.
    • 2. Aufbau der Startkonfiguration durch Hinzufügen von M und Teilen der Dreiecke UAY und EYA: T = {MAE, MEY, MYU, MUA} HR = {A, E, M, U, V} Siehe 8b.
    • 3. Teilen des Dreiecks MYU, da es die Punkte R, S und W umschließt: T = {MAE, MEY, WUM, WMY, MUA} HR = {A, E, M, U, W, Y} Siehe 8c.
    • 4. Teilen des Dreiecks WMY, da es die Punkte R und S umschließt: T = {MAE, MEY, WUM, SWM, SYW, MUA} HR = {A, E, M, S, U, W, Y} Siehe 8d.
    • 5. Teilen des Dreiecks MEY, da es die Punkte O und S umschließt: T = {MAE, OME, OYM, WUM, SWM, SYW, MUA} HR = {A, E, M, O, S, U, W, Y} Siehe 8e.
    • 6. Teilen des Dreiecks OYM, da es die Punkte O und S umschließt: T = {MAE, OME, SMO, SOY, WUM, SWM, SYW, MUA} HR = {A, E, M, O, S, U, W, Y} Siehe 8f.
    • 7. Teilen des Dreiecks SWM, da es den Punkt R umschließt: T = {MAE, OME, SMO, SOY, WUM, RMS, RSW, SYW, MUA} HR = {A, E, M, O, R, S, U, W, Y} Siehe 8g.
    • 8. Teilen des Dreiecks WUM, da es den Punkt R umschließt: T = {MAE, OME, SMO, SOY, QWU, QMW, RMS, RSW, SYW, MUA} HR = {A, E, M, O, Q, R, S, U, W, Y} Siehe 8h.
    • 9. Teilen des Dreiecks QMW, da es den Punkt R umschließt: T = {MAE, OME, SMO, SOY, QWU, RQM, RWQ, RMS, RSW, SYW, MUA} HR = {A, E, M, O, Q, R, S, U, W, Y} Siehe 8i.
    • 10. Teilen des Dreiecks MUA, da es den Punkt Q umschließt: T = {MAE, OME, SMO, SOY, QWU, RQM, RWQ, RMS, RSW, SYW, KAM, KMU} HR = {A, E, K, M, O, Q, R, S, U, W, Y} Siehe 8k.
    • 11. Teilen des Dreiecks KMU, da es den Punkt Q umschließt: T = {MAE, OME, SMO, SOY, QWU, RQM, RWQ, RMS, RSW, SYW, KAM, QKM, QUK} HR = {A, E, K, M, O, Q, R, S, U, W, Y} Siehe 8m.
  • Die Triangulierung ist nun abgeschlossen, da HR ⊇ HS und das RTIN frei von T-Stellen ist.
  • Verwendet man für die Darstellung ein TIN oder RTIN, dann ist grundsätzlich ein so genannter CLOD (Abk. für „continuous level of detail") als eine spezielle Form des LOD möglich, d. h. man kann den Detaillierungsgrad in der Landschaftsdarstellung kontinuierlich verändern, indem man Dreiecke dort hinzufügt oder entfernt, wo die Detaillierung verändert werden soll. Dies geschieht dadurch, dass man zusätzliche Höhenpunkte aus der Höhenkarte, die vorher durch ein Auswahlverfahren nicht berücksichtigt waren, jetzt für die Landschaftsdarstellung mitberücksichtigt (Detaillierung verbessern) oder sie im umgekehrten Fall unberücksichtigt lässt (Detaillierung verschlechtern).
  • In die Klasse CLOD fallen eine Reihe von Verfahren, wie z. B. „ROAM" [34] oder „SOAR" [37]. Es gibt eine zweite Klasse von Verfahren, die LOD zulassen. In diese zweite Klasse von Verfahren fallen alle Verfahren, die mit dem so genannten DLOD (Abk. für „discrete level of detail") arbeiten, d. h. hier kann nur zwischen diskreten Detaillierungszuständen gewechselt werden. Zu der Klasse von Verfahren mit DLOD gehören z. B. „Geometry Clipmaps" [10] oder „Chunked LOD" [29]. Hier existieren andere Vorschriften für die Änderung der Detaillierung, d. h. hier werden für eine Höhenkarte z. B. verschiedene Detaillierungsebenen definiert und zum Teil in vorher berechneter Form erzeugt, zwischen denen dann bei Bedarf gewechselt wird. Der Unterschied zwischen CLOD und DLOD besteht in der Granularität, mit der der Detaillierungsgrad verändert werden kann. Bei CLOD ist es möglich, minimale Änderungen durch das Hinzufügen oder das Entfernen einzelner Dreiecke vorzunehmen, wohingegen DLOD lediglich erlaubt, den Detaillierungsgrad stufenweise für festgelegte Bereiche der Höhenkarte zu wechseln. Der Wechsel zwischen zwei DLOD Detaillierungsstufen macht sich in der grafischen Ausgabe in Form der so genannten „Pops" [29] bemerkbar: Die dargestellte Landschaft scheint zu „zucken" bzw. „zu hüpfen". Um dieses Problem zu vermeiden, setzen DLOD-Verfahren eine Form von Geomorphing wie z. B. in [35] ein; dabei findet eine Überblendung zwischen den Detaillierungsstufen statt, d. h. der spontane Wechsel zwischen zwei Stufen von Einzelbild zu Einzelbild wird ersetzt durch einen weichen Übergang in Form einer Animation, die über viele interpolierte Einzelbilder verteilt ist.
  • Auch bei CLOD-Verfahren existiert das Phänomen der „Pops". Sind die Dreiecke, die geteilt werden bzw. die zusammengeführt werden, zu groß, macht sich diese Änderung in der grafischen Ausgabe bemerkbar. Das Prädikat „zu groß" bedeutet in diesem Zusammenhang, dass die Anzahl der Pixel auf dem Bildschirm, die sich aufgrund der Teilung bzw. der Zusammenführung der Dreiecke spontan ändern, so hoch ist, dass dies vom Betrachter als störend wahrgenommen wird. Um die Notwendigkeit von Geomorphing bei CLOD-Verfahren zu vermeiden, muss das Dreiecknetz an detaillierten Stellen derart verfeinert werden, dass die Dreiecke auf dem Bildschirm nur wenige Pixel bedecken. Dadurch wird der „Pops"-Effekt so weit minimiert, dass er nicht mehr als störend bzw. gar nicht mehr wahrgenommen wird. In diesem Fall wird kein Geomorphing mehr benötigt. Dies birgt eine Reihe von Vorteilen:
    • – Der Aufwand der Implementierung des Verfahrens ist deutlich geringer, somit auch kostengünstiger.
    • – Die Performanz ist höher, da die Berechnung der Animation für das Geomorphing wegfällt.
    • – Die Flexibilität des Verfahrens ist größer, da keine vom Geomorphing gestellten Anforderungen und Bedingungen mehr erfüllt werden müssen. Dies erleichtert die Portierung der Implementierung eines Verfahrens auf andere Plattformen.
  • Das Problem bei bestehenden CLOD-Verfahren besteht nun darin, dass eine dadurch bewirkte Verfeinerung des Dreiecknetzes die eingesetzten Algorithmen zur Triangulierung und Traversierung überlastet. Diese Überlastung ist in einem oder mehreren der folgenden Punkte begründet:
    • – Überlastung des Datenbusses: Übertragt ein Verfahren beim Zeichnen von Dreiecken die Daten der Vertexpunkte immer wieder aufs Neue (siehe „SOAR" [37]), so müssen für jedes Einzelbild sehr große Datenmengen an die GPU übertragen werden. Dies verbraucht wertvolle Ressourcen, die der Anwendung dann an anderer Stelle fehlen.
    • – Überlastung der Vorschrift zur Triangulierung der Höhenkarte: Die Berechnungen, die seitens der CPU zur Triangulierung durchgeführt werden, verbrauchen derart viel Prozessorleistung, dass keine ausreichend hohe Bildwiederholrate garantiert werden kann. Die Darstellung „ruckelt". Hierzu gehören beispielsweise die Berechnung des Auswahlverfahrens der Simplifizierung und die Berechnung der Daten der Vertexpunkte aus den Daten der Höhenpunkte (siehe „SOAR" [37]).
    • – Überlastung der Vorschrift zur Traversierung der Höhenkarte: Der Aufwand seitens der CPU, um Grafikprimitive für die grafische Ausgabe zu formulieren, ist zu hoch, als dass eine ruckelfreie Darstellung gewährleistet werden könnte (siehe „ROAM" [34]). Weiterhin spielen die Anzahl der abgesetzten Zeichenbefehle und die Anzahl der Vertexpunkte pro Zeichenbefehl eine bedeutende Rolle: Werden zu viele Zeichenbefehle abgesetzt, kann die Grafikkarte nicht ihre volle Leistung entfalten. Enthalten die Zeichenbefehle zu viele oder zu wenige Vertexpunkte, so reduziert dies ebenso die Leistung der Grafikkarte. Die optimalen Werte hierfür lassen sich meist nur empirisch bestimmen und unterscheiden sich zwischen verschiedenen Grafikkarten.
  • Verwaltet werden Dreiecknetze über Datenmodelle. Im einfachsten Fall lassen sich Dreiecknetze über Listen der Netzpunkte darstellen, wobei für jeden Höhenpunkt der Höhenkarte ein Netzpunkt erstellt wird. Über diese Liste wird dann durch eine Verfahrensvorschrift die Triangulierung durchgeführt. Dabei stellt die Liste der Netzpunkte zusammen mit der Verfahrensvorschrift für die Triangulierung das Datenmodell dar. Das Datenmodell zusammen mit der Triangulierung und das Dreiecknetz sind eine identische Repräsentation einer Höhenkarte. Auf dieser Repräsentation wird ein Verfahren für die Traversierung definiert, durch das die Dreieckstreifen für die grafische Ausgabe durch die Grafikkarte gebildet werden. Ein Verfahren, welches als Datenstruktur eine einfache Liste verwendet, ist der „bruteforce approach". Die Details der Datenstruktur zusammen mit der Triangulierung und die Traversierungsvorschrift sind in 9 dargestellt.
  • Für die Darstellung von Dreiecknetzen kennt man eine Reihe von unterschiedlichen Datenstrukturen. In Verbindung mit einem RTIN, das viele Verfahren benutzen, die CLOD erlauben, kennt man Datenstrukturen, die speziell auf ein solches RTIN zugeschnitten sind. Hierzu zählt der Binärbaum, der z. B. von „ROAM" verwendet wird [34, 36], der DAG (Abk. für „directed acyclic graph"), der von „SOAR" verwendet wird [14, 18, 26, 37, 40], und die so genannte Diamant-Datenstruktur, die in „ROAM 2.0" zum Einsatz kommt [32]. In diesen Datenstrukturen werden die Höhenpunkte bzw. die Dreiecke der darzustellenden Landschaft so angeordnet, dass man daraus die Triangulierung effizient durchführen kann. Die in dieser Datenstruktur über einen Index verwalteten Höhenpunkte bezeichnet man als Netzpunkte (siehe S. 9). Für die Traversierung (z. B. für die Bildung eines Dreieckstreifens) wird eine bestimmte Vorschrift festgelegt, mit der die Datenstruktur ausgewertet wird.
  • Wie effizient ein grafisches Verfahren zur Landschaftsdarstellung arbeitet, wird entscheidend durch die zugrunde liegende Datenstruktur, die darauf basierende Triangulierung und die Traversierung bestimmt.
  • Bei der Repräsentation eines RTIN über einen Binärbaum werden Dreiecke, die durch Höhenpunkte aufgespannt werden, als Knoten benutzt. Als Wurzel dient das Quadrat, das die Höhenkarte umschließt. Ein Knoten kann bis zu zwei Unterknoten und einen Oberknoten haben. Die Unterknoten eines Knotens entsprechen dabei den beiden Teilungsdreiecken, die entstehen, wenn das Dreieck des Knotens geteilt wird. Umgekehrt verweist der Oberknoten eines Knotens auf das Dreieck, das geteilt werden musste, um das Dreieck des Knotens zu erzeugen. 10a veranschaulicht diesen Aufbau: Der Wurzelknoten „Höhenkarte" enthält die Unterknoten UAY und EYA. Diese Dreiecke stellen das minimale RTIN dar. Durch die Teilung des Dreiecks UAY sind die Teilungsdreiecke MYU und MUA entstanden, deshalb hat der Knoten UAY die Unterknoten MYU und MUA, und die Knoten MYU und MUA haben den gemeinsamen Oberknoten UAY. Dreiecke, die noch nicht geteilt wurden, werden im Binärbaum als Blattknoten dargestellt. Ein Blattknoten hat keine Unterknoten (z. B. der Knoten MAE). Die Menge der Blattknoten des Binärbaums entspricht der Menge der Dreiecke, die für die Darstellung des RTIN verwendet werden.
  • Die Darstellung eines RTIN über einen DAG erfolgt, indem die Höhenpunkte der Höhenkarte als Knoten eines gerichteten azyklischen Graphen benutzt werden. Die Knoten sind über gerichtete Kanten (Pfeile) miteinander verbunden. Zeigt ein solcher Pfeil von Knoten A zu Knoten B, so bedeutet dies, das B ein Nachfolger von A ist und das A ein Vorgänger von B ist. Ein Knoten des DAGs kann dabei bis zu zwei Vorgänger und bis zu vier Nachfolger haben. 10b veranschaulicht den Aufbau des DAG; 10c zeigt die Struktur des DAG, bezogen auf die Koordinaten der Knotenpunkte in der Höhenkarte aus 7b. Die Struktur des DAGs für das minimale RTIN ist per Definition vorgegeben. Jeder Knoten des DAGs (mit Ausnahme der Punkte A und Y) repräsentiert den Scheitelpunkt mindestens eines Dreiecks des RTIN. Die Teilungspunkte dieser Dreiecke sind die Nachfolger des Knotens. Die Vorgänger eines Knotens verweisen dementsprechend auf die Scheitelpunkte derjenigen Dreiecke, die als gemeinsamen Teilungspunkt den Knoten selbst haben. 10d zeigt den maximalen DAG, d. h. nachdem alle Höhenpunkte zum RTIN hinzugefügt wurden.
  • Ein Netzpunkt im RTIN ist immer der Teilungspunkt zweier Dreiecke. Eine Ausnahme bilden die Netzpunkte auf dem Rand des RTIN, diese stellen den Teilungspunkt von nur einem Dreieck dar. Die folgende Beschreibung geht von Netzpunkten aus, die nicht auf dem Rand des RTIN liegen. Die Dreiecke, die als gemeinsamen Teilungspunkt einen Netzpunkt N haben, stellen den so genannten Diamanten von N dar.
  • Ein Diamant im DAG besteht aus fünf Netzknoten (siehe 11b). Der Netzpunkt A stellt den Mittelpunkt des Diamanten dar. Die Netzpunkte S0 und S1 sind die Vorgänger von A. Der Netzpunkt D ist sowohl ein Vorgänger von So als auch von S1. Der Netzpunkt E ist entweder ein Vorgänger von D oder es besteht keine Vorgänger-Nachfolger-Beziehung zwischen D und E.
  • Im Binärbaum besteht ein solcher Diamant aus zwei Knoten. Diese Knoten sind keine Blattknoten des Binärbaums, da sie bereits geteilt wurden, um den Mittelpunkt des Diamanten hervorzubringen. 11a veranschaulicht dies: Der Diamant des Netzpunkts A setzt sich aus den bereits geteilten Dreiecken S0ED und S1DE zusammen, d. h. er besteht aus den Einzeldreiecken ADS0, AS0E, AES1 und AS1D.
  • Die Diamant-Datenstruktur baut auf dem DAG auf. Für jeden Netzpunkt D werden in der Diamant-Datenstruktur acht Referenzen auf andere Netzpunkte gespeichert (siehe 10e): Die Referenzen K0, K1, K2 und K3 entsprechen den Nachfolger Referenzen des DAG. Die Referenzen A1 und A3 bilden die Vorgänger Referenzen des DAGs ab. Die Referenz A0 ist der gemeinsame DAG-Vorgänger der Netzpunkte A1 und A3. Analog zum DAG kann die A2-Referenz entweder ein Vorgänger von A0 sein, oder es besteht keine Beziehung zwischen diesen Netzpunkten. Zusätzlich zu den acht Referenzen K0...K3 und A0...A3 speichert die Diamant-Datenstruktur noch Informationen über die geometrische Lage der Netzpunkte. Dazu wird für jede Vorgängerreferenz (A1 und A3) eines Netzpunkts D ein Nachfolgerindex i mit 0 ≤ i ≤ 3 gespeichert, für den gilt: Der Ki Nachfolger von A1 bzw. A3 ist der Netzpunkt D. Die Nachfolgerindizes für die Vorgängerreferenzen A1 und A3 werden im Folgenden mit IA1 und IA3 bezeichnet.
  • Die Verfeinerung eines RTIN wird durchgeführt, indem die Einzeldreiecke eines Diamanten eines Netzpunkts weiter geteilt werden. Dabei entsteht ein Teilungspunkt auf dem Rand des Diamanten. Um T-Stellen zu vermeiden, ist es nun notwendig, die angrenzenden Dreiecke ebenfalls zu teilen. Teilt man beispielsweise das Dreieck AES1 (siehe 11a und 11b), so müsste ebenfalls genau das Dreieck geteilt werden, das über die Kante ES1 an das Dreieck AES1 angrenzt. Hierbei kann es zu zwei Situationen kommen (im Folgenden Teilungskasus):
    • 1. Das angrenzende Dreieck hat die gleiche Größe wie das zu teilende Dreieck. Die gemeinsame Kante stellt jeweils die Hypotenuse der beiden Dreiecke dar.
    • 2. Das angrenzende Dreieck hat die zweifache Größe wie das zu teilende Dreieck. Die Hypotenuse des zu teilenden Dreiecks und eine Seitenkante des angrenzenden Dreiecks bilden die gemeinsame Kante ES1 [31].
  • Im ersten Fall muss lediglich das angrenzende Dreieck geteilt werden, um die T-Stelle zu beheben. 8e veranschaulicht dies: Das Dreieck WMY soll geteilt werden, das angrenzende Dreieck ist OYM, und die gemeinsame Kante MY stellt die Hypotenuse beider Dreiecke dar. Das RTIN ist von T-Stellen frei, nachdem zusätzlich das Dreieck OYM geteilt wurde.
  • Im zweiten Fall muss zunächst das angrenzende Dreieck geteilt werden. Die dabei entstehenden Teildreiecke haben nun die gleiche Größe wie das zu teilende Dreieck. Eines dieser Teildreiecke besitzt dann eine gemeinsame Kante mit dem zu teilenden Dreieck. Diese Konstellation entspricht wieder dem ersten Fall, d. h. dementsprechend werden beide Dreiecke geteilt. 8d verdeutlicht diesen Fall: Das Dreieck WMY soll geteilt werden, das angrenzende Dreieck MEY hat aber die doppelte Größe und muss zunächst geteilt werden, was zu den Teildreiecken OME und OYM führt. Nun grenzt das Dreieck OYM and das zu teilende Dreieck WMY an, und beide haben die gleiche Größe, d. h. es kann gemäß dem ersten Fall verfahren werden. Im zweiten Fall kann es notwendig sein, mehr als zwei Dreiecksteilungen vorzunehmen. 8g zeigt dies: Das Dreieck SWM soll geteilt werden. Das angrenzende Dreieck ist WUM. Soll jetzt das Dreieck WUM geteilt werden, tritt nochmals der zweite Fall ein: Es muss nun auch das Dreieck MUA geteilt werden. Diese Wiederholung setzt sich bei der Dreiecksteilung solange fort, bis der erste Fall eintritt.
  • Darauf aufbauend lässt sich eine allgemeine Verfahrensvorschrift für das Teilen eines Dreiecks im RTIN formulieren (siehe 12), im Folgenden nur noch Teilungsalgorithmus genannt:
    Im ersten Schritt muss ein ungeteiltes Dreieck des RTIN ausgewählt werden (1), das im nächsten Schritt geteilt werden soll. Diese Auswahl wird von der Anwendung getroffen. Die Art und Weise, wie diese Auswahl getroffen wird, ist nicht Bestandteil des hier beschriebenen Verfahrens. Das Verfahren „ROAM" [34] benutzt hierfür z. B. eine Warteschlange, in die alle teilbaren Dreiecke aufgenommen werden. Die Dreiecke in der Warteschlange werden sortiert, so dass diejenigen Dreiecke, welche die zugrunde liegende Landschaft am schlechtesten approximieren, am Anfang stehen. Das zu teilende Dreieck wird dann gewählt, indem das erste Dreieck aus der Warteschlange entnommen wird. Im zweiten Schritt wird der eigentliche Teilungsalgorithmus auf dem gewählten Dreieck ausgeführt, d. h. die Funktion „Teilen" wird mit dem gewählten Dreieck als Parameter aufgerufen (2). Der Vorgang ist abgeschlossen, wenn die Teilen-Funktion abgearbeitet wurde (3).
  • Die Teilen-Funktion teilt ein Dreieck des RTIN unter Berücksichtigung der dabei entstehenden T-Stellen. Zusätzliche Dreieckteilungen werden durchgeführt, um etwaige T-Stellen zu beseitigen. Bekannte Implementierungen der Teilen-Funktion sind z. B. SPLIT [34] und NOTIFY [27]. Wird die Teilen-Funktion aufgerufen, so wird als erstes das Dreieck t, das als Parameter übergeben wurde, geteilt (4). Dabei entsteht eine T-Stelle am Teilungspunkt von t (eine Ausnahme bilden Dreiecke, deren Hypotenuse auf dem Rand des RTIN liegen, hier entsteht keine T-Stelle). Um die entstandene T-Stelle zu beseitigen, muss nun das Dreieck ta bestimmt werden, dass über die Hypotenuse von t an t angrenzt (5). Im folgenden Schritt wird bestimmt, welcher Teilungskasus vorliegt (6). Liegt der zweite Fall vor, so muss zunächst das Dreieck ta geteilt werden. Dazu ruft die Funktion „Teilen" sich selbst rekursiv mit dem Parameter ta auf (7). Die dabei entstehenden Teildreiecke von ta haben jetzt die gleiche Größe wie t, und eines davon grenzt an t an. Es findet ein Sprung zu Schritt 5 statt (8), wo erneut das an t angrenzende Dreieck bestimmt wird. Das neu bestimmte Dreieck ta und t haben jetzt die gleiche Größe, bei der folgenden Bestimmung des Teilungskasus tritt also immer der erste Fall ein (6). Wird bei der Bestimmung des Teilungskasus der erste Fall festgestellt (6), muss lediglich das Dreieck ta geteilt werden, um ein von T-Stellen freies. RTIN zu erhalten (9), da das Dreieck t bereits in Schritt 4 geteilt wurde. Damit ist der Teilungsvorgang abgeschlossen, und die Teilen Funktion wird beendet (10).
  • Ausgehend von einem existierenden, von T-Stellen freien RTIN muss im letzten Schritt eine Traversierung der enthaltenen Dreiecke durchgeführt werden, um Grafikprimitive zu bilden, die an die Grafikkarte zur Darstellung übermittelt werden können.
  • Implementiert man den beschriebenen Teilungsalgorithmus, so hängt die Performanz entscheidend davon ab, wie effizient die einzelnen Schritte des Algorithmus umgesetzt werden. Die Wahl der Datenstruktur beeinflusst dabei in erheblichem Maße die Effizienz.
  • Ausgehend von dem beschriebenen Stand der Technik besteht das technische Problem der Erfindung in der Schaffung von Verfahren und Vorrichtungen der eingangs beschriebenen Art zur dreidimensionalen Landschaftsdarstellung in Echtzeit insbesondere auf Rechnerbildschirmen und mit Hilfe konventioneller Grafiksysteme wie z. B. OpenGL bzw. DirectX-kompatiblen Grafikkarten wie z. B. die XFX GeForce 8800 Ultra von NVIDIA oder die FireGL V7350 von ATI. In Verbindung damit sollen ein besonders effizienter Teilungsalgorithmus und eine effiziente Vorschrift für die Traversierung des RTIN geschaffen werden, bei der ähnlich wie bei „SOAR” ein Dreieckstreifen erzeugt werden kann, der die gesamte darzustellende Landschaft abdeckt.
  • Zur Lösung dieses Problems dienen erfindungsgemäß die kennzeichnenden Merkmale der Ansprüche 1 und 22.
  • Die Erfindung bringt den Vorteil mit sich, dass die Vertexdaten nur einmalig und damit nicht für jedes Einzelbild erneut an die Grafikkarte übermittelt bzw. in deren Grafikspeicher eingegeben werden. Weiter brauchen der Grafikkarte zur Darstellung eines Bildes auf dem grafischen Ausgabegerät lediglich Indexwerte (Adressen) übermittelt werden, die der Grafikkarte mitteilen, aus welchen in ihrem Grafikspeicher befindlichen Vertexpunkten bzw. Dreiecken ein Bild zusammengesetzt werden soll. Dadurch reduziert sich die pro Vertexpunkt zu übertragende Datenmenge von z. B. 36 Bytes bei bekannten Verfahren auf z. B. vier Bytes, was zu einer erheblichen Beschleunigung des Übertragungsvorgangs führt. Außerdem ist es vorteilhaft, dass die beim erfindungsgemäßen Verfahren genutzte Datenstruktur keine Koordinaten od. dgl. von Vertexpunkten, sondern lediglich Hinweise (Referenzen) auf Vorgänger und/oder Nachfolger der einzelnen Netzpunkte vorsieht. Die Eingabe dieser Referenzen in einen dafür vorgesehenen Zwischenspeicher erfolgt weiterhin so, dass die anhand der im Zwischenspeicher befindlichen Referenzen gebildeten Dreieckstreifen automatisch zu einem von T-Stellen freien RTIN führen. Hierzu werden den eingegebenen Netzpunkten für den Fall, dass sie zu einer T-Stelle führen würden, anhand einfacher logischer Operationen so lange weitere Netzpunkte hinzugefügt, bis die T-Stellenfreiheit vorhanden ist. Aufwendige arithmetische Rechenoperationen zur Berücksichtigung von vorberechneten Fehlerwerten od. dgl. werden zur Durchführung dieser Operationen nicht benötigt, so dass diese sehr schnell ablaufen können. Schließlich ermöglicht eine erfindungsgemäße Datenstruktur auch ein schnelles Auslesen des Zwischenspeichers zwecks Bildung des Dreieckstreifens, weil auch hierfür nur logische Vergleichsoperationen erforderlich sind und die im Zwischenspeicher befindlichen Daten bereits die gewünschte T-Stellen-Freiheit garantieren.
  • Weitere vorteilhafte Merkmale der Erfindung ergeben sich aus den Unteransprüchen.
  • Die Erfindung wird nachfolgend in Verbindung mit den beiliegenden Zeichnungen an Ausführungsbeispielen näher erläutert. Es zeigen:
  • 1a beispielhaft eine übliche Höhenkarte mit grau markierten Höhenpunkten in einer Draufsicht und einer perspektivischen Ansicht;
  • 1b schematisch den Zusammenhang von Höhenpunkten, Vertexpunkten und Netzpunkten;
  • 2 schematisch eine Höhenkarte mit Triangulierung in einer Draufsicht auf der Basis eines gleichmäßigen Netzes und daneben in einer perspektivischen Darstellung die auf die Höhenkarte basierende Landschaftsvisualisierung;
  • 3a der 2 entsprechende Ansichten einer Höhenkarte mit Triangulierung auf der Basis eines TIN;
  • 3b der 2 entsprechende Ansichten einer Höhenkarte mit Triangulierung auf der Basis eines RTIN;
  • 4 das Auftreten einer T-Stelle in einem RTIN (links im offenen Netz, rechts im geschlossenen Netz);
  • 5 die Auflösung der T-Stellen nach 4 durch zusätzliche Dreiecke (links im offenen Netz, rechts im geschlossenen Netz);
  • 6 den Ablauf zum Aufbau des RTIN;
  • 7a eine Höhenkarte mit darin enthaltenen Höhenpunkten;
  • 7b die Höhenkarte nach 7a mit durch eine Anwendung ausgewählten Höhenpunkten;
  • 7c ein zu der Höhenkarte nach 7b gehörendes, reguläres RTIN auf der Basis der ausgewählten Höhenpunkte;
  • 8a bis 8m schematisch den Aufbau des RTIN nach 7c mittels elf aufeinander folgenden Verfahrensschritten;
  • 9 schematisch die Traversierung nach dem „brute-force approach";
  • 10a die Darstellung eines RTIN mittels eines Binärbaums;
  • 10b die Darstellung eines RTIN mittels eines DAG;
  • 10c die Struktur des DAG, bezogen auf die Koordinaten der Höhenpunkte in der Höhenkarte:
  • 10d die Anordnung der Höhenpunkte im DAG;
  • 10e die Diamant Datenstruktur im DAG;
  • 11a und 11b die Darstellung eines Diamanten des RTIN in Binärbaumdarstellung bzw. in DAG-Darstellung;
  • 12 eine Verfahrensvorschrift zur Durchführung einer Dreiecksteilung im RTIN;
  • 13a die Durchführung des erfindungsgemäßen Verfahrens zur Darstellung einer Landschaft mit Hilfe einer Software-Lösung;
  • 13b die Durchführung des erfindungsgemäßen Verfahrens zur Darstellung einer Landschaft mit Hilfe einer Hardware-Lösung;
  • 14a bis 14h schematisch die Bedeutung von Referenzpunkten, die im Rahmen des erfindungsgemäßen Verfahrens einem Netzpunkt zugeordnet werden können;
  • 15 zwei Typen von Diamanten bei Anwendung einer erfindungsgemäßen Datenstruktur (xDAG);
  • 16 eine erfindungsgemäße Startkonfiguration „Quadrat";
  • 17 eine erfindungsgemäße Startkonfiguration „Oktaeder";
  • 18 eine erfindungsgemäße Startkonfiguration „Würfel";
  • 19a und 19b eine Operation „Hinzufügen" für die beiden Diamant-Typen nach 15;
  • 20a bis 21b schematische Flussdiagramme für verschiedene, im Rahmen des erfindungsgemäßen Verfahrens durchführbare Funktionen, die unter den jeweiligen Abbildungen einzeln erläutert sind;
  • 22a die Ausrichtung der Dreiecke eines Dreieckstreifens;
  • 22b die Eingangs- und Ausgangskanten bei der Traversierung eines einfachen Dreiecks;
  • 23 ein terminales Dreieck im RTIN oder xDAG; und
  • 24a bis 26h schematische Flussdiagramme für verschiedene, im Rahmen des erfindungsgemäßen Verfahrens durchführbare Funktionen, die unter den jeweiligen Abbildungen einzeln erläutert sind.
  • Allgemein betrifft die nachfolgend beschriebene Erfindung ein Verfahren und ein Computersystem zur dreidimensionalen Landschaftsdarstellung auf Rechnerbildschirmen über konventionelle Grafiksysteme, so dass der Grad der Detaillierung kontinuierlich verändert (d. h. vergrößert oder verkleinert) werden kann. Das im Folgenden beschriebene Verfahren zählt in die Klasse der CLOD(continuous level of detail)-Verfahren. Ausgangspunkt für die grafische Darstellung ist eine Höhenkarte, die in dem Computersystem gespeichert ist. Die Höhenkarte enthält Messdaten, die die Landschaft beschreiben (z. B. Höhenwerte oder Texturen) und die von einer Anwendung über das Grafiksystem des Rechners als dreidimensionale Darstellung auf dem Bildschirm ausgegeben werden soll (siehe 1a). Für die dreidimensionale Darstellung der Landschaft unter einem bestimmten Blickwinkel und einem vorgegebenen Detaillierungsgrad werden für eine effiziente Arbeitsweise nur bestimmte Höhenpunkte aus der Höhenkarte benötigt (Sichtbarkeitsprüfung). Für die Auswahl dieser Punkte gibt es eine Reihe von unterschiedlichen Verfahrensvorschriften, die nicht Gegenstand des hier vorliegenden Verfahrens sind, die aber von einer Anwendung benutzt werden können.
  • Das vorliegende Verfahren geht davon aus, dass von der Anwendung eine Sichtbarkeitsprüfung durchgeführt wurde. Mit den bei der Sichtbarkeitsprüfung ausgewählten Höhenpunkten aus der Höhenkarte wird eine Datenstruktur (im Folgenden als „xDAG" bezeichnet) für ein von T-Stellen freies RTIN erzeugt. Um den Detaillierungsgrad einer dreidimensionalen Landschaftsdarstellung auf der Basis einer Höhenkarte zu ermöglichen, werden auf dieser Datenstruktur zusätzlichen die Funktionen „Hinzufügen" und „Entfernen" definiert, die zusätzliche Höhenpunkte aus der Höhenkarte hinzufügen bzw. entfernen, und zwar so, dass immer ein RTIN ohne T-Stellen entsteht.
  • Der Aufbau dieses xDAG geschieht dabei in mehreren Abschnitten:
    • 1. Der xDAG wird anhand einer Startkonfiguration initialisiert. Für die Startkonfiguration werden die vier Eckpunkte und der Mittelpunkt der Höhenkarte benutzt (siehe 8b). Diese Startkonfiguration ist für alle Fälle gleich und stellt das kleinstmögliche, von T-Stellen freie RTIN dar, das mit der vorliegenden Höhenkarte realisiert werden kann. Dieses RTIN stellt damit gleichzeitig auch die gröbste Approximation (geringste Detaillierung) der darzustellenden Landschaft dar. Die in dieser Datenstruktur enthaltenen, nachfolgend als „Netzpunkte" bezeichneten Punkte der Höhenkarte werden über Indexwerte (Zeilennummern im xDAG) verwaltet (1b). Die Anwendung stellt die Beziehung dieser Indexwerte zu den Koordinaten der Höhenpunkte her.
    • 2. Es wird eine Operation „Hinzufügen" definiert. Durch wiederholtes Anwenden der Operation „Hinzufügen" wird der xDAG schrittweise um neue Punkte aus der Höhenkarte, die für eine detaillierterte Darstellung von der Anwendung als notwendig ermittelt wurden, erweitert. Die Operation „Hinzufügen" ist dabei so definiert, dass neben dem Einfügen der zusätzlichen Punkte auch – wenn nötig – all diejenigen Punkte hinzugefügt werden, die benötigt werden, um ein von T-Stellen freies RTIN zu erzeugen. Der xDAG ist vollständig und frei von T-Stellen für die auszuführende Darstellung, wenn alle von der Anwendung bestimmten Punkte im xDAG hinzugefügt wurden und durch die Punkte ergänzt wurden, die für ein von T-Stellen freies RTIN gebraucht werden. Das so gebildete RTIN beschreibt dann für die darzustellende Situation die Landschaft durch die bestmöglichste Approximation. Die neu hinzugefügten Höhenpunkte im xDAG werden ebenfalls mit einem Indexwert versehen. Die Anwendung stellt über den Indexwert die Verbindung zu den entsprechenden Punkten der Höhenkarte her.
    • 3. Aufbauend auf einer bestehenden Approximation kann der Grad der Detaillierung durch weiteres Anwenden der definierten Operation „Hinzufügen" kontinuierlich verbessert werden. Die Operation wird dabei so definiert, dass immer ein RTIN ohne T-Stellen erzeugt wird.
    • 4. Es wird eine Operation „Entfernen" definiert, mit der man den Grad der Detaillierung kontinuierlich herabsetzen kann.
    • 5. Aufbauend auf einer bestehenden Approximation, repräsentiert durch den xDAG, wird eine Traversierung des gesamten Netzes oder eines von der Anwendung frei wählbaren Teils davon durchgeführt. Das Verfahren generiert dazu einen Dreieckstreifen aus den Punkten dieses Netzteils. Der Streifen wird dem Grafiksystem zur Ausgabe übermittelt. Dabei werden die Indexwerte der Punkte zur Grafikkarte übertragen.
    • 6. Aufgrund der erfindungsgemäßen Verfahrensvorschriften ist das Verfahren deterministisch, d. h. echtzeitfähig. Es werden im Gegensatz zu anderen Verfahren keine vorausberechneten Daten verwendet. Dies erweitert den Bereich der Anwendbarkeit deutlich.
  • Das erfindungsgemäße, nachfolgend durchweg kurz als „Cloddy bezeichnete Verfahren zur Visualisierung von Landschaften erzeugt, ausgehend von einer Höhenkarte, eine Approximation in Form eines RTIN (siehe 3b). Verwaltet wird dieses RTIN über die Datenstruktur xDAG. Basierend auf der Datenstruktur xDAG wird die Triangulierung so durchgeführt, dass immer ein von T-Stellen freies RTIN entsteht. Über den xDAG wird auch die Traversierung ausgeführt, d. h. es werden ein oder mehrere Dreieckstreifen gebildet, mit denen die Landschaft über die Grafikkarte auf dem Bildschirm ausgegeben wird.
  • Das Verfahren Cloddy kann als Softwarelösung implementiert werden und wird dann als Komponente durch ein anderes Computerprogramm (= Anwendung) benutzt. Als Anwendungen sind z. B. Videospiele, Simulationen usw. denkbar. In 13a werden die Zusammenhänge und Abläufe des Verfahrens anhand eines Computersystems 1 veranschaulicht. Dabei werden folgende Komponenten benutzt:
    • – Anwendung 2: Sie ist das Computerprogramm, das das Verfahren Cloddy benutzt, um eine Landschaftsvisualisierung, basierend auf einer vorgegebenen Höhenkarte, durchzuführen.
    • – Höhenkarte: Die Höhenkarte enthält die Höhenpunkte, die den Ausgangspunkt für die Visualisierung einer Landschaft darstellen. Sie wird z. B. über einen Festspeicher 3 zur Verfügung gestellt.
    • – Festspeicher 3: Der Festspeicher 3 speichert die Ausprägungen der Attribute der Höhenpunkte. Diese Höhendaten können als Datenbank auf einem Speichermedium (z. B. Festplatte, CD, DVD, Flash-EPROM oder einem anderen Speichermedium) vorliegen oder aber auch in Form einer komplexen Rechenvorschrift bereitgestellt werden (prozedurale Generierung von Höhendaten).
    • – Hauptspeicher 4: Er ist der Speicher, der dem Computersystem 1 zur Ausführung von Computerprogrammen zur Verfügung steht und in dem u. a. die Anwendung 2 gespeichert ist.
    • – Grafikkarte 5: Die Grafikkarte 5 enthält einen separaten Hochleistungs-Grafikspeicher 6, den sie für die grafischen Ausgaben benutzt. In diesem Grafikspeicher 6 werden die Ausprägungen der Darstellungsattribute der Vertexpunkte aus der Triangulierung abgelegt. Der hierfür benötigte Teil 6a des Grafikspeichers 6 wird nachfolgend kurz als „Vertexspeicher" bezeichnet. Die Grafikkarte 5 enthält außerdem die Grafik-Hardware 7 (GPU).
    • – Cloddy (Programm-Modul 8): Erfindungsgemäßes Verfahren zur Realisierung eines von T-Stellen freien RTIN.
    • – xDAG: Der xDAG ist die Datenstruktur des Verfahrens Cloddy 8 und speichert die Struktur des Dreiecknetzes, das die aktuelle Approximation der Landschaft darstellt, innerhalb eines dafür vorgesehenen Bereichs 4a des Hauptspeichers 4.
    • – xDAG-Operationen 9: Diese Komponente implementiert Verfahrensvorschriften in Cloddy 8, um den xDAG zu bearbeiten und auszuwerten. Als xDAG-Operationen werden die Operationen „Hinzufügen" und „Entfernen" definiert, über die Netzpunkte aus den xDAG entfernt oder hinzugefügt werden. Die Operation „Dreieckstreifen" wird für die Ausgabe der Landschaft über die Grafikkarte 5 verwendet.
  • Zwischen diesen Komponenten werden Befehle und Daten ausgetauscht.
  • Folgendes Beispiel veranschaulicht schematisch den Ablauf, wenn die Anwendung 2 Cloddy 8 benutzt, um eine Landschaftsvisualisierung durchzuführen:
    • 1. Die Anwendung 2 stellt eine Verbindung 10 zum Festspeicher 3 her, der die Höhenpunkte der Höhenkarte enthält.
    • 2. Die Anwendung 2 bestimmt die maximale Anzahl cmax von Netzpunkten, die für die Bildung des RTIN benutzt werden können. Da gilt: HR ⊆ H, entspricht cmax in der Regel der maximalen Anzahl von Elementen in der, Menge H. Da quadratische Höhenkarten der Dimension n·n vorausgesetzt werden, ist cmax = n2 (Extremfall). Ist dieser Wert für cmax zu groß und deshalb nicht verwendbar, wird die Bestimmung von cmax unter der Berücksichtigung von folgenden Aspekten durchgeführt: a. Größe des zur Verfügung stehenden Speichers: Der Bedarf an Haupt- und Grafikspeicher für den xDAG 4a und den Vertexspeicher 5a ist proportional zur maximalen Anzahl von Netzpunkten. Da pro Netzpunkt jeweils ein Eintrag im xDAG und eine Speicherstelle im Vertexspeicher 5a benötigt wird, kann aus dem zur Verfügung stehenden Speicher eine obere Schranke für den Wert von cmax abgeleitet werden. Es gilt: cmax ≤ MA/MN, wobei MA die Größe des zur Verfügung stehenden Speichers angibt und MN den Speicherbedarf für einen Netzpunkt darstellt. b. Kodierung der Indexwerte: Die Art und Weise, wie eine Implementierung die Indexwerte der Netzpunkte des RTIN kodiert, bestimmt eine obere Schranke für den Wert von cmax. Es gilt: cmax ≤ 2n – 2, wobei n die Anzahl der verwendeten Bits ist. Bei einer Kodierung mit 16 Bits könnten demnach maximal 65534 Vertexpunkte verwendet werden (zwei Indexwerte müssen für die speziellen Werte NULL und VOID verwendet werden, hier z. B. 65535 und 65534). c. Beschaffenheit des verwendete Sichtbarkeitskriteriums: Das Sichtbarkeitskriterium, das die Anwendung benutzt, um die Menge der relevanten Höhenpunkte HS zu bestimmen, bestimmt die minimale Menge an Netzpunkten, die benötigt wird, um die Landschaft in ausreichender Qualität zu approximieren. Im Idealfall ist cmax gleich der maximalen Anzahl von Elementen der Menge HS ⋃ HR. Ist cmax zu groß gewählt, wird unnötig Speicherplatz belegt.
    • 3. Die Anwendung 2 legt den Vertexspeicher 5a auf der Grafikkarte 5 an. Dabei wird jedem möglichen Netzpunkt ein fester Speicherbereich zugewiesen, in welchem die Darstellungsattribute des zugehörigen Vertexpunkts gespeichert werden können. Der Speicherbedarf des Vertexspeichers 6a entspricht Cmax·MV, wobei MV den Speicherbedarf eines Vertexpunkts angibt. Die Größe des Vertexspeichers 6a korreliert zur Anzahl der verwendeten Netzpunkte. Die Anzahl der Vertexpunkte, die abgespeichert werden, ist ebenfalls cmax.
    • 4. Die Anwendung 2 startet über eine Verbindung 11 das Verfahren Cloddy 8. Dabei übergibt sie die in Schritt 2. festgelegte maximale Anzahl an Netzpunkten cmax über eine Verbindung 12.
    • 5. Cloddy 8 legt den xDAG im Bereich 4a des Hauptspeichers 4 an. Dabei wird für jeden möglichen Netzpunkt Speicherplatz für einen Eintrag im xDAG vorgesehen. Der Speicherbedarf des xDAG entspricht cmax·MN, wobei MN den Speicherbedarf für einen Eintrag im xDAG angibt.
    • 6. Die Anwendung 2 sendet Cloddy 8 den Befehl zum Erzeugen der Startkonfiguration. Die Menge der Höhenpunkte, die für die Erzeugung der Startkonfiguration herangezogen werden, ist per Definition vorgegeben. Ausgehend von einer diskreten quadratischen zweidimensionalen Höhenkarte der Größe n·n mit n ∊ N werden beispielsweise immer folgende Höhenpunkte verwendet: (0; 0), (n; 0), (n; n), (0; n), (n/2; n/2). Die Reihenfolge der verwendeten Höhenpunkte sowie die Koordinaten für den Zugriff auf die Höhenkarte lassen sich hierbei direkt aus der Definition der Startkonfiguration ableiten.
    • 7. Cloddy 8 berechnet Indizes für die fünf Netzpunkte der Startkonfiguration, aktualisiert den xDAG 4a und übermittelt die Indizes an die Anwendung 2.
    • 8. Die Anwendung 2 liest die Höhenpunkte für die fünf Netzpunkte der Startkonfiguration aus der Höhenkarte im Festspeicher 3 aus. Die Koordinaten für den Zugriff auf die Höhenkarte sind hierbei per Definition festgelegt. Aus den Höhendaten errechnet die Anwendung die zugehörigen Vertexpunkte. Diese Daten werden anschließend im Vertexspeicher 6a der Grafikkarte 5 abgelegt (Verbindung 14). Die Indizes geben dazu die Speicherstelle an.
    • 9. Die Anwendung 2 bestimmt die Menge der für die Darstellung relevanten Höhenpunkte anhand eines beliebigen Sichtbarkeitskriteriums.
    • 10. Die Anwendung 2 führt wiederholt Teilungen von Dreiecken des RTIN durch, bis alle relevanten Höhenpunkte im RTIN in Form eines Netzpunkts enthalten sind. Die Teilung eines Dreiecks erfolgt dadurch, dass die Anwendung 2 den „Hinzufügen"-Befehl unter Angabe eines möglichen Teilungspunkts an Cloddy 8 sendet.
    • 11. Cloddy 8 fügt den Teilungspunkt als neuen Netzpunkt zum RTIN hinzu; dabei werden Dreiecke geteilt. Alle Netzpunkte, die für ein von T-Stellen freies RTIN benötigt werden, werden von Cloddy 8 automatisch hinzugefügt. Für jeden hinzuzufügenden Netzpunkt berechnet Cloddy 8 einen Index und aktualisiert den xDAG 4a. Cloddy 8 übermittelt den Index des hinzugefügten Netzpunkts sowie die Indizes der bereits existierenden benachbarten Netzpunkte an die Anwendung 2 über eine Verbindung 15.
    • 12. Die Anwendung 2 berechnet anhand der übermittelten Nachbarpunkte die Koordinaten, um den Höhenpunkt des neuen Netzpunkts aus der Höhenkarte auszulesen. Sie berechnet den Vertexpunkt des neuen Netzpunkts und speichert diese Daten im Vertexspeicher 6a der Grafikkarte 5 ab. Der Index des neuen Netzpunkts gibt dazu die Speicherstelle an.
    • 13. Die Anwendung 2 sendet Cloddy 8 den Befehl „Dreieckstreifen".
    • 14. Cloddy 8 führt eine Traversierung des xDAG durch. Die Indizes der besuchten Netzpunkte übermittelt Cloddy 8 an die Anwendung 2 über eine Verbindung 16. Die Sequenz der besuchten Netzpunkte stellt ein Triangle Strip Grafikprimitiv dar, da jedem Netzpunkt genau ein Vertexpunkt zugeordnet ist und der Index des Netzpunkts der Speicherposition des zugehörigen Vertexpunkts im Vertexspeicher 5a entspricht.
    • 15. Die Anwendung 2 sendet der Grafikkarte 5 über eine Verbindung 17 den Befehl zum Zeichnen eines Dreieckstreifens. Dabei übermittelt sie die Indizes, die Cloddy 8 berechnet hat (Verbindung 18).
    • 16. Die Grafikkarte 5 liest die Vertexpunkte aus dem Vertexspeicher 5a aus und erstellt die grafische Ausgabe, die über eine Verbindung 19 einem grafischen Ausgabegerät 20 (Bildschirm) zugeführt wird. Die übermittelten Indizes geben dabei die Speicherstellen der Vertexpunkte im Vertexspeicher an.
  • Ist die maximale Anzahl von Netzpunkten erreicht (d. h. die Anzahl der Einträge im xDAG ist gleich cmax) und cmax ist kleiner als die Gesamtzahl der Höhenpunkte in der Höhenkarte, kann das RTIN nicht weiter verfeinert werden. Stattdessen müssen zunächst Netzpunkte an anderer Stelle aus dem RTIN entfernt werden. Dies geschieht, indem die Anwendung, die Cloddy benutzt, die xDAG Operation „Entfernen" benutzt. Über die xDAG Operation „Hinzufügen" können anschließend wieder neue Netzpunkte zum xDAG hinzugefügt werden. Die Funktionsweise dieser Operationen wird im Zusammenhang mit der Datenstruktur xDAG definiert.
  • Die in 13a dargestellten Teile 2 und 4 bis 19 bilden das erfindungsgemäße Computersystem 1. Der Vollständigkeit halber ist in 13a außerdem ein Bediener angedeutet, der mittels eines Eingabegeräts 21, das über eine Leitung 22 an das Computersystem 1 angeschlossen ist, diesem Steuerkommandos zuführen kann.
  • Außerdem verfügt das Computersystem 1 über eine übliche, nur schematisch angedeutete CPU 23.
  • Aufgrund der besonderen Eigenschaften des xDAG und der darauf definierten Operationen „Hinzufügen", „Entfernen" und „Dreieckstreifen" ist es möglich, das Verfahren Cloddy gemäß eines bisher für am besten gehaltenen Ausführungsbeispiels auch über Hardware in Form eines integrierten Schaltkreises 24 oder als Teil eines Grafikcontrollers zu implementieren. Nach 13b, in der gleiche Teile mit denselben Bezugszeichen wie in 13a versehen sind, kann das Verfahren Cloddy so direkt auf der Grafikkarte 5 ausgeführt werden. Dies bringt zusätzliche Geschwindigkeitsvorteile bei der Ausführung. Im Unterschied zur Implementierung über Software sieht die Zusammenarbeit der Anwendung 2 mit Cloddy 8 dann folgendermaßen aus:
    • 1. Die Anwendung 2 stellt eine Verbindung 10 zum Festspeicher 3 her, der die Höhenpunkte der Höhenkarte enthält.
    • 2. Die Anwendung 2 bestimmt die maximale Anzahl cmax von Netzpunkten, die für die Bildung des RTIN benutzt werden können.
    • 3. Die Anwendung 2 startet das Verfahren Cloddy B. Dabei übergibt sie die in Schritt 2. festgelegte maximale Anzahl an Netzpunkten cmax.
    • 4. Cloddy 8 legt den Vertexspeicher 6a auf der Grafikkarte 5 an. Dabei wird jedem möglichen Netzpunkt ein fester Speicherbereich zugewiesen, in welchem die Darstellungsattribute des zugehörigen Vertexpunkts gespeichert werden können.
    • 5. Cloddy 8 legt den xDAG in einem Bereich 6b des Grafikspeichers 6 der Grafikkarte 5 an. Dabei wird für jeden möglichen Netzpunkt Speicherplatz für einen Eintrag im xDAG vorgesehen.
    • 6. Die Anwendung 2 sendet Cloddy 8 den Befehl zum Erzeugen der Startkonfiguration (Verbindung 25).
    • 7. Cloddy 8 berechnet Indizes für die fünf Netzpunkte der Startkonfiguration, aktualisiert den xDAG 6b und übermittelt die Indizes an die Anwendung 2 (Verbindung 26).
    • 8. Die Anwendung 2 liest die Höhenpunkte für die fünf Netzpunkte der Startkonfiguration aus der Höhenkarte im Festspeicher 3 aus. Die Koordinaten für den Zugriff auf die Höhenkarte sind hierbei per Definition festgelegt. Aus den Höhendaten errechnet die Anwendung 2 die zugehörigen Vertexpunkte. Diese Daten werden anschließend im Vertexspeicher 6a der Grafikkarte 5 abgelegt. Die Indizes geben dazu die Speicherstelle an.
    • 9. Die Anwendung 2 bestimmt die Menge der für die Darstellung relevanten Höhenpunkte anhand eines beliebigen Sichtbarkeitskriteriums.
    • 10. Die Anwendung 2 führt wiederholt Teilungen von Dreiecken des RTIN durch, bis alle relevanten Höhenpunkte im RTIN in Form eines Netzpunkts enthalten sind. Die Teilung eines Dreiecks erfolgt dadurch, dass die Anwendung 2 den „Hinzufügen"-Befehl unter Angabe eines möglichen Teilungspunkts an Cloddy 8 sendet.
    • 11. Cloddy 8 fügt den Teilungspunkt als neuen Netzpunkt zum RTIN hinzu; dabei werden Dreiecke geteilt. Alle Netzpunkte, die für ein von T-Stellen freies RTIN benötigt werden, werden von Cloddy 8 automatisch hinzugefügt. Für jeden hinzuzufügenden Netzpunkt berechnet Cloddy 8 einen Index und aktualisiert den xDAG. Cloddy 8 übermittelt den Index des hinzugefügten Netzpunkts sowie die Indizes der bereits existierenden benachbarten Netzpunkte an die Anwendung 2.
    • 12. Die Anwendung 2 berechnet anhand der übermittelten Nachbarpunkte die Koordinaten, um den Höhenpunkt des neuen Netzpunkts aus der Höhenkarte auszulesen. Sie berechnet den Vertexpunkt des neuen Netzpunkts und speichert diese Daten im Vertexspeicher 6a der Grafikkarte 5 ab. Der Index des neuen Netzpunkts gibt dazu die Speicherstelle an.
    • 13. Die Anwendung 2 sendet Cloddy 8 den Befehl „Dreieckstreifen".
    • 14. Cloddy 8 führt eine Traversierung des xDAG 6b durch. Die Indizes der besuchten Netzpunkte werden direkt in die GPU 7 gespeist, die parallel zur Traversierung die grafische Ausgabe erstellt (Verbindung 19).
  • Eine Hardwareumsetzung hat einen entscheidenden Vorteil: Die Grafikkarte 5 kann die Traversierung des xDAG durchführen und gleichzeitig den resultierenden Dreieckstreifen ausgeben. Die Indizes der Vertexpunkte des Dreieckstreifens müssen nicht mehr zwischengespeichert, an die Anwendung 2 übermittelt und von dort an die Grafikkarte 5 weitergeleitet werden.
  • Zentrales Element des hier beschriebenen Verfahrens Cloddy ist der xDAG. Der xDAG ist eine Weiterentwicklung der Diamant-Datenstruktur. Er wird verwendet, um die Struktur des RTIN – also die aktuelle Approximation der Landschaft – zu speichern.
  • Der xDAG 6b wird als eine Tabelle mit acht Spalten und cmax Zeilen definiert, wobei cmax die von der Anwendung bestimmte maximale Anzahl von Netzpunkten darstellt. Jedem Netzpunkt ist eine Zeile im xDAG 6b zugeordnet, der Indexwert des Netzpunkts entspricht hierbei der Zeilennummer (beginnend bei 0). Die Spalten des xDAG 6b sind, bezogen auf den aktuellen Netzpunkt, bezeichnet mit:
    • 1. L = „Linker Vorgänger", im Folgenden L-Vorgänger,
    • 2. R = „Rechter Vorgänger", im Folgenden R-Vorgänger,
    • 3. G = „Gemeinsamer Vorfahre", im Folgenden G-Vorfahre,
    • 4. W = „Wurzel Vorfahre", im Folgenden W-Vorfahre,
    • 5. LL = „Nachfolger links-links", im Folgenden LL-Nachfolger,
    • 6. LR = „Nachfolger links-rechts", im Folgenden LR-Nachfolger,
    • 7. RL = „Nachfolger rechts-links", im Folgenden RL-Nachfolger,
    • 8. RR = „Nachfolger rechts-rechts", im Folgenden RR-Nachfolger.
  • Auf der Datenstruktur xDAG 6b wird im weiteren Verlauf eine Semantik definiert. Über diese Semantik wird ein Regelwerk abgeleitet, um die Spalten der xDAG-Tabelle zu füllen.
  • Die oben genannten Bezeichnungen „links" und „rechts" geben einen Hinweis auf die geometrische Lage von Teilungspunkten (siehe 14a). Ausgehend von einem bereits geteilten Dreieck T mit dem Teilungspunkt A und den Teildreiecken T0 und T1 mit den Teilungspunkte B und C lassen sich die Bezeichnungen „links" und „rechts" folgendermaßen interpretieren: Den Vektor AB erhält man, indem man den Vektor SA um 45° nach links dreht und mit –√1/2 multipliziert. Den Vektor AC erhält man, indem man den Vektor AS um 45° nach rechts dreht und mit –√1/2 multipliziert. Auf die Dreiecke T, T1 und T0 bezogen lässt sich sagen, dass T0 das linke Teildreieck von T ist und T1 das rechte Teildreieck von T ist. Diese Aussagen lassen sich rekursiv auf die Teildreiecke T0 und T1 anwenden: Geht man beispielsweise vom Dreieck ADS aus und teilt dessen Teildreiecke BSA und BAD, so erhält man die gleiche Konfiguration wie zu Beginn, nur die Bezeichnungen der Dreiecke und Netzpunkte ändern sich.
  • 14b veranschaulicht die Bedeutung des L-Vorgängers: Ausgangspunkt ist ein geteiltes Dreieck im RTIN, definiert durch die Netzpunkte SED. Der Netzpunkt A ist der Teilungspunkt des Dreiecks SED. Im xDAG ist der Netzpunkt A ein Nachfolger von Netzpunkt S. Der Netzpunkt B ist der Teilungspunkt, der durch die Teilung des linken Teildreiecks von SED entsteht. Im xDAG wird der Netzpunkt A daher als 1-Vorgänger des Netzpunkts B eingetragen.
  • 14c veranschaulicht die Bedeutung des R-Vorgängers: Ausgangspunkt ist ein geteiltes Dreieck im RTIN, definiert durch die Netzpunkte SED. Der Netzpunkt A ist der Teilungspunkt des Dreiecks SED. Im xDAG ist der Netzpunkt A ein Nachfolger von Netzpunkt S. Der Netzpunkt C ist der Teilungspunkt, der durch die Teilung des rechten Teildreiecks von SED entsteht. Im xDAG wird der Netzpunkt A daher als R-Vorgänger des Netzpunkts C eingetragen.
  • 14d veranschaulicht die Bedeutung des G-Vorfahren: Ausgangspunkt ist ein geteiltes Dreieck im RTIN, definiert durch die Netzpunkte SED. Die Teildreiecke ADS und ASE wurden bereits geteilt, wodurch die Teilungspunkte B und C erhalten wurden. Weiterhin wurden das linke Teildreieck von ADS und das rechte Teildreieck von ASE bereits geteilt. Der Netzpunkt F ist ein Nachfolger von Netzpunkt B und Netzpunkt C. Die Netzpunkt B und C sind Nachfolger von Netzpunkt A. Seien vb und vc die Mengen, die die Vorgänger der Netzpunkte B bzw. C enthalten. Die Schnittmenge vb ∩ vc enthält dann nur ein Element, nämlich den Netzpunkt A. Der Netzpunkt A ist also der gemeinsame Vorgänger der Netzpunkte B und C, und diese stellen die beiden Vorgänger des Netzpunkts F dar. Im xDAG wird der Netzpunkt A daher als G-Vorfahre des Netzpunkts F eingetragen.
  • Der W-Vorfahre lässt sich anhand der Betrachtung des Diamanten des Netzpunkts F bestimmen (siehe 14d): Der Diamant des Netzpunkts F besteht aus den Netzpunkten A, B, C, S und F; dabei stellen die Netzpunkte A, B und C den G-Vorfahren, der L-Vorgänger und den R-Vorgänger des Netzpunkts F dar. Der Netzpunkt S ist der einzige Netzpunkt des Diamanten, der noch nicht im xDAG abgebildet ist. Daher wird der Netzpunkt S als W-Vorfahre des Netzpunkts F eingetragen.
  • Die 14e veranschaulicht die Bedeutung des LL-Nachfolgers: Ausgangspunkt ist ein geteiltes Dreieck im RTIN, definiert durch die Netzpunkte SED mit dem Teilungspunkt A. Das linke Teildreieck von SED wird geteilt, wodurch der Teilungspunkt B entsteht. Anschließend wird das linke Teildreieck BSA von ADS geteilt; dadurch entsteht der Teilungspunkt F. Im xDAG wird der Netzpunkt F daher als LL-Nachfolger des Netzpunkts B eingetragen.
  • Die 14f veranschaulicht die Bedeutung des LR-Nachfolgers: Ausgangspunkt ist ein geteiltes Dreieck im RTIN, definiert durch die Netzpunkte SED mit dem Teilungspunkt A. Das linke Teildreieck von SED wird geteilt, wodurch der Teilungspunkt B entsteht. Anschließend wird das rechte Teildreieck BAD von ADS geteilt; dadurch entsteht der Teilungspunkt H. Im xDAG wird der Netzpunkt H daher als LR-Nachfolger des Netzpunkts B eingetragen.
  • Die 14g veranschaulicht die Bedeutung des RL-Nachfolgers: Ausgangspunkt ist ein geteiltes Dreieck im RTIN, definiert durch die Netzpunkte SED. Das rechte Teildreieck ASE wird geteilt, wodurch der Teilungspunkt C entsteht. Anschließend wird das linke Teildreieck CEA von ASE geteilt; dadurch entsteht der Teilungspunkt K. Im xDAG wird der Netzpunkt K daher als RL-Nachfolger des Netzpunkts C eingetragen.
  • Die 14h veranschaulicht die Bedeutung des RR-Nachfolgers: Ausgangspunkt ist ein geteiltes Dreieck im RTIN, definiert durch die Netzpunkte SED und den Teilungspunkt A. Das rechte Teildreieck ASE wird geteilt, wodurch der Teilungspunkt C entsteht. Anschließend wird das rechte Teildreieck CAS von ASE geteilt; dadurch entsteht der Teilungspunkt F. Im xDAG wird der Netzpunkt F daher als RR-Nachfolger des Netzpunkts C eingetragen.
  • Die acht Spalten des xDAG lassen sich auf die Referenzen, die in der Diamant-Datenstruktur pro Netzpunkt gespeichert werden, abbilden:
    Referenz Diamant Datenstruktur: A0 A1 IA1 A2 A3 IA3 K0 K1 K2 K3
    Referenz xDAG: G R - W L - RR RL LR LL
    Tabelle T1 – Abbildung Diamant-Datenstruktur zu xDAG
  • Die Besonderheit des xDAG besteht nun darin, dass die Nachfolgerindizes, die in der Diamant-Datenstruktur explizit gespeichert werden müssen, im xDAG nicht benötigt werden. Stattdessen werden die Informationen über die geometrische Lage von Netzpunkten, die in der Diamant-Datenstruktur über die Nachfolgerindizes bereitgestellt werden, beim xDAG unter Benutzung der weiter unten definierten Semantik direkt in die Struktur des xDAG eingebettet. Dadurch kann einerseits Speicherplatz für die Speicherung des RTIN eingespart werden, und andererseits können die auf der xDAG-Datenstruktur definierten Operationen effizienter implementiert werden, da keine Nachfolgerindizes ausgelesen und ausgewertet werden müssen.
  • Die xDAG-Datenstruktur kann als Tabelle der folgenden Form implementiert werden:
    IDX1 L R G W LL LR RL RR
    0 Wert2 Wert Wert Wert Wert Wert Wert Wert
    1 Wert Wert Wert Wert Wert Wert Wert Wert
    ... ... ... ... ... ... ... ... ...
    n – 1 Wert Wert Wert Wert Wert Wert Wert Wert
    Tabelle T2 – Aufbau der xDAG-Tabelle
    • 1 Diese Spalte gibt den Indexwert der zugehörigen Tabellenzeile an (Netzpunkt). Dieser Wert wird nicht explizit gespeichert, sondern er ergibt sich direkt aus der Anordnung der Zeilen des xDAG im Speicher.
    • 2 „Wert" steht stellvertretend für einen Indexwert eines Netzpunkts.
  • Die Zeilenzahl n wird über cmax von der Anwendung 2 gewählt. Anhand dieser Information kann der Speicherbedarf für den xDAG berechnet werden, da die Spaltenzahl sowie der Speicherbedarf pro Spalte bekannt ist. Der Speicherbedarf pro Spalte wird von der Implementierung des Cloddy-Verfahrens vorgegeben. Üblicherweise kommen hier 32 Bit-Worte zum Einsatz. Auf mobilen Endgeräten könnten aufgrund der Beschränktheit der zur Verfügung stehenden Ressourcen stattdessen 16 Bit-Worte benutzt werden.
  • Bei einer Software-Implementierung von Cloddy wird ein entsprechend großer Bereich 4a im Hauptspeicher 4 der CPU für den xDAG reserviert; bei einer Hardware-Umsetzung würde ein entsprechend großer Bereich 6b im Grafikspeicher 6 der Grafikkarte 5 reserviert werden.
  • Jede Zelle des xDAG speichert einen Indexwert. Dieser Wert wird als Verweis auf eine andere Zeile des xDAG interpretiert. Wird zum Beispiel der Wert „1" in die Spalte „LL" der Zeile „0" eingetragen, so bedeutet dies, dass der Netzpunkt, der dem Indexwert „1" zugeordnet ist, der LL-Nachfolger des Netzpunkts „0" ist. Auf diese Weise werden die Kanten des gerichteten Graphen dargestellt. Im weiteren Verlauf kommt folgende Notation zum Einsatz, um auf Zellen innerhalb des xDAG zu verweisen: „{Zeilenindex}. {Spaltenname}". Beispielsweise würde der Ausdruck „81.W" auf die Zelle der „W" Spalte in der 82. Zeile des xDAG verweisen (die Nummerierung beginnt bei Null). Bei der Beschreibung der Operationen des xDAG werden Variablen benutzt, die eine Zeilennummer speichern: Der Ausdruck „X.LL" verweist demnach auf die Zelle der „LL" Spalte, die in der Zeile liegt, deren Zeilennummer dem aktuellen Wert von X entspricht.
  • Eine Zelle des xDAG kann zwei besondere Indexwerte speichern: NULL und VOID. Eine Zelle, die mit NULL belegt ist, bedeutet, dass die entsprechende Referenz momentan nicht gesetzt ist. Durch die Ausführung der „Hinzufügen" Operation kann die Zelle später mit einem anderen Wert belegt werden. Nur die Nachfolgerreferenzen LL, LR, RL und RR eines Netzpunkts können den Wert NULL annehmen.
  • Eine Zelle, die mit VOID belegt ist, bedeutet, dass die entsprechende Referenz nicht belegt ist und auch nicht belegt werden kann, da der Netzpunkt, auf den verwiesen werden würde, außerhalb der Höhenkarte liegt. Beispielsweise wird eine der beiden Vorgängerreferenzen eines Netzpunkts im RTIN, der am Rand der Höhenkarte liegt, mit VOID belegt.
  • Im Folgenden wird die Syntax für die erfindungsgemäße, neu entwickelte Datenstruktur xDAG vorgestellt. Bei der Belegung der Vorgänger- und Nachfolgerreferenzen des xDAG gelten die folgenden Restriktionen. Seien A, B und C Punkte aus dem xDAG, angegeben durch ihren Indexwert. Es gilt: B == A.L ⇔ A == B.LL ∨ A == B.RL B == A.R ⇔ A == B.LR ∨ A == B.RR B == A.LL ∨ B == A.LR ⇒ B.G == A.L B == A.RL ∨ B == A.RR ⇒ B.G == A.R B == A.LL ∨ B == A.RR ⇒ B.W == A.G B == A.LR ∨ B == A.RL ⇒ B.W == A.W A == C.L ∧ B == C.R ⇒ (C == A.LLA ∧ C == B.RR) ∨(C == A.RL A C == B.LR) A.L = VOID ⇒ A.LL = VOID ∧ A.LR = VOID A.R = VOID ⇒ A.RL = VOID ∧ A.RR = VOID (13)
    X.L := L-Vorgänger von X X. R := R-Vorgänger von X
    X.G := G-Vorfahre von X X.W := W-Vorfahre von X,
    X.LL := LL-Nachfolger von X X.LR := LR-Nachfolger von X,
    X.RL := RL-Nachfolger von X X.RR := RR-Nachfolger von X.
  • Weiterhin sollen folgende Regeln gelten, bezogen auf ein bereits geteiltes Dreieck im RTIN (siehe 14a): A == S.LL ∨ A == S.RL ⇒ B == A.LL ∧ C == A.LR A == S.LR ∨ A == S.RR ⇒ B == A.RL ∧ C == A.RR (14)
  • Dieser Regelsatz bildet die Syntax des xDAG, welche die Grundlage für die Operation „Hinzufügen", „Entfernen" und „Dreieckstreifen" bildet.
  • Im xDAG gibt es zwei verschiedene Typen von Diamanten, die aus der besonderen Semantik des xDAG hervorgehen. 15 veranschaulicht diese Situation. Der Netzpunkt M stelle den Mittelpunkt eines Diamanten im xDAG dar. Die Netzpunkte L, R, G und W stellen dann die L-, R-Vorgänger, G- und W-Vorfahren von M dar. Zwischen den Netzpunkten M, L, R, G und W bestehen folgende Beziehungen:
  • Diamanttyp A:
    • G ist der LL-, LR-, RL- oder RR-Nachfolger von W, entsprechend ist W der L- oder R-Vorgänger von G;
    • L ist der LL- oder RL-Nachfolger von G, entsprechend ist G der L-Vorgänger von L.
    • R ist der LR- oder RR-Nachfolger von G, entsprechend ist G der R-Vorgänger von R.
    • M ist der LL-Nachfolger von L, entsprechend ist L der L-Vorgänger von M.
    • M ist der RR-Nachfolger von R, entsprechend ist R der R-Vorgänger von M.
  • Diamanttyp B:
    • L ist der LR- oder RR-Nachfolger von G, entsprechend ist G der R-Vorgänger von L.
    • R ist der LL- oder RL-Nachfolger von G, entsprechend ist G der L-Vorgänger von R.
    • M ist der RL-Nachfolger von L, entsprechend ist L der L-Vorgänger von M.
    • M ist der LR-Nachfolger von R, entsprechend ist R der R-Vorgänger von M.
  • Aus der Struktur der Diamanttypen A und B lassen sich folgende Aussagen bezogen auf die Netzpunkte L, R und M ableiten (im Folgenden als Nachfolgersymmetrie bezeichnet): M == L.LL ⇔ M == R.RR M == L.RL ⇔ M == R.LR (15)
  • Der Aufbau des xDAG beginnt mit der Startkonfiguration. Eine Startkonfiguration des xDAG besteht aus festen Einträgen für die ersten Zeilen der xDAG-Tabelle. Diese Einträge sind unabhängig von der Höhenkarte immer gleich und können bei der Implementierung fest einprogrammiert bzw. fest verdrahtet werden.
  • Im Folgenden ist die Startkonfiguration „Quadrat" für eine quadratische zweidimensionale Höhenkarte dargestellt (siehe 16). Diese Basisgeometrie kommt bei einer ebenen Fläche zum Einsatz. Die Höhenwerte werden senkrecht zu dieser Fläche abgetragen, um die Positionen der zugehörigen Vertexpunkte zu bestimmen.
  • Die folgende Tabelle zeigt die initialen Werte der xDAG-Tabelle für die Startkonfiguration „Quadrat":
    IDX L R G W LL LR RL RR
    0 VOID VOID VOID VOID 1 VOID VOID VOID
    1 0 VOID VOID VOID 2 3 VOID VOID
    2 1 VOID 0 VOID 4 VOID VOID VOID
    3 VOID 1 0 VOID VOID VOID VOID 4
    4 2 3 1 0 NULL NULL NULL NULL
    Tabelle T3 – Startkonfiguration „Quadrat"
  • Die folgende Tabelle zeigt exemplarisch die Koordinaten der entsprechenden Höhenpunkte für eine diskrete zweidimensionale Höhenkarte der Größe n:
    Figure 00460001
    Tabelle T4 – Startkonfiguration „Quadrat" – Koordinaten der Höhenpunkte
  • Der Netzpunkt 4 dient als Startpunkt für die weitere Verfeinerung des RTIN. Die Startkonfiguration entspricht dem Diamanten des Netzpunkts 4. Ein RTIN, das aus der Startkonfiguration „Quadrat" hervorgeht, hat vier Ränder. An diesen Rändern ist es notwendig, dass diejenigen Nachfolgerreferenzen, die – falls benutzt – auf Netzpunkte verweisen würden, die außerhalb der Höhenkarte liegen, gesperrt werden, indem die entsprechenden Spalten des xDAG mit VOID belegt werden. Die Struktur der Startkonfiguration „Quadrat" und der spezielle Aufbau der Hinzufügen-Operation (die im Folgenden noch vorgestellt wird) erlauben es, die Erkennung von Netzpunkten, die auf dem Rand des RTIN liegen, besonders effizient durchzuführen.
  • Neben der Basisgeometrie der ebenen Fläche wird auch die Kugel als Basisgeometrie verwendet (z. B. für die Visualisierung von Planeten) [13, 19]. In diesem Fall werden die Höhenpunkte der Höhenkarte auf der Oberfläche der Kugel platziert, und die Höhenwerte der Höhenpunkte werden in Richtung der Oberflächennormalen abgetragen, um die Positionen der zugehörigen Vertexpunkte zu bestimmen.
  • Die Höhenpunkte, die in Form von Netzpunkten dem RTIN hinzugefügt wurden, bilden einen konvexen Polyeder innerhalb der Kugel; dabei liegen alle Eckpunkte des Polyeders auf der Kugeloberfläche. Die Seitenflächen des Polyeders entsprechen den Dreiecken des RTIN. Der Polyeder stellt gleichzeitig eine Approximation der Kugel und der zugrunde liegenden Landschaft dar. Die Seitenflächen des Polyeders können geteilt werden (d. h. das entsprechende Dreieck im RTIN wird durch Aufrufen der Hinzufügen-Operation geteilt), um die Qualität der Approximation zu verbessern.
  • Bei der Startkonfiguration „Oktaeder" stellt ein Oktaeder die gröbstmögliche Approximation der Landschaft bzw. des Planeten dar (siehe 17). Hier kann eine dreidimensionale Höhenkarte verwendet werden; dabei dienen die Oberflächennormalen der Höhenpunkte als Koordinaten für den Zugriff auf die Höhenkarte. Alternativ können zwei quadratische zweidimensionale Höhenkarten für jeweils die obere und untere Hemisphäre der Kugel verwendet werden. Eine Besonderheit der Startkonfiguration „Oktaeder" besteht darin, dass das RTIN keine Ränder hat (vgl. dazu Startkonfiguration „Quadrat"), d. h. alle aus der Startkonfiguration hervorgehenden Netzpunkte haben zwei Vorgänger.
  • Die folgende Tabelle zeigt die initialen Werte der xDAG-Tabelle für die Startkonfiguration „Oktaeder":
    IDX L R G W LL LR RL RR
    0 VOID VOID VOID VOID 2 VOID VOID VOID
    1 2 VOID VOID VOID 5 4 5 4
    2 0 VOID VOID VOID 3 1 3 1
    3 2 VOID VOID VOID 4 5 4 5
    4 3 1 2 0 NULL NULL NULL NULL
    5 1 3 2 0 NULL NULL NULL NULL
    Tabelle T5 – Startkonfiguration „Oktaeder"
  • Die folgende Tabelle zeigt exemplarisch die Koordinaten der entsprechenden Höhenpunkte für eine dreidimensionale Höhenkarte:
    Figure 00480001
    Tabelle T6 – Startkonfiguration „Oktaeder" – Koordinaten der Höhenpunkte
  • Die Netzpunkte 4 und 5 dienen als Startpunkte für die weitere Verfeinerung des RTIN, wobei der Netzpunkt 4 das Zentrum der oberen Hemisphäre darstellt und Netzpunkt 5 das Zentrum der unteren Hemisphäre.
  • Die folgende Tabelle zeigt die initialen Werte der xDAG Tabelle für die Startkonfiguration „Würfel" (siehe 18):
    IDX L R G W LL LR RL RR
    0 VOID VOID VOID VOID VOID VOID VOID VOID
    1 VOID 2 VOID VOID 12 VOID 9 8
    2 VOID VOID VOID VOID VOID VOID VOID VOID
    3 7 VOID VOID VOID 13 11 8 VOID
    4 VOID 7 VOID VOID VOID 12 11 10
    5 VOID VOID VOID VOID VOID VOID VOID VOID
    6 7 VOID VOID VOID 10 13 VOID 9
    7 VOID VOID VOID VOID VOID VOID VOID VOID
    8 3 1 2 0 14 NULL NULL NULL
    9 1 6 2 5 NULL 15 NULL 16
    10 6 4 7 5 NULL NULL 17 NULL
    11 4 3 7 0 NULL NULL NULL NULL
    12 1 4 5 0 15 NULL NULL 17
    13 3 6 7 2 NULL 14 16 NULL
    14 8 13 3 2 NULL NULL NULL NULL
    15 12 9 1 5 NULL NULL NULL NULL
    16 13 9 6 2 NULL NULL NULL NULL
    17 10 12 4 5 NULL NULL NULL NULL
    Tabelle T7 – Startkonfiguration „Würfel"
  • Die Diamanten der Netzpunkte 8, 9, 10, 11, 12 und 13 repräsentieren jeweils eine Seitenfläche des Würfels. Diese Netzpunkte können als Ausgangspunkt für die weitere Verfeinerung des Netzes benutzt werden.
  • Die folgende Tabelle zeigt exemplarisch die Koordinaten der entsprechenden Höhenpunkte für eine dreidimensionale Höhenkarte:
    Figure 00490001
    Tabelle T8 – Startkonfiguration „Würfel" – Koordinaten der Höhenpunkte
  • Zur Verwaltung des xDAG werden drei verschiedene Operationen definiert, die Operation „Hinzufügen", die Operation „Entfernen" und die Operation „Dreieckstreifen".
  • Die Operation „Hinzufügen":
  • Die Hinzufügen-Operation fügt einen neuen Netzpunkt in das RTIN ein. Dabei werden – falls nötig – zusätzliche Netzpunkte eingefügt, um die T-Stellenfreiheit des RTIN zu gewährleisten. Die Hinzufügen Operation kann als Unterprogramm (im weiteren Verlauf Funktion) der folgenden Signatur implementiert werden (Pseudocode): Funktion Add(V, T):C (16)mit
    T ∊ {LL, LR, RL, RR)
    V := Indexwert eines existierenden Netzpunkts
    C := Indexwert des hinzugefügten Netzpunkts, NULL oder VOID.
  • Der Eingabeparameter V gibt an, für welchen Netzpunkt ein Nachfolger zum RTIN hinzugefügt werden soll. Der Netzpunkt wird über seinen Indexwert angegeben. Der Eingabeparameter T gibt an, welcher Nachfolger von V hinzugefügt werden soll; dazu wird der Typ der Nachfolgerreferenz angegeben. Das Unterprogramm liefert über den Ausgabeparameter C den Indexwert des neu hinzugefügten Netzpunkts zurück. Die Sonderfälle C = NULL und C = VOID werden im weiteren Verlauf erläutert.
  • Bei der Ausführung der Add-Funktion entsteht ein neuer Diamant; der hinzugefügte Netzpunkt M stellt dabei den Mittelpunkt des neuen Diamanten dar. Je nach Wert des Eingabeparameters T hat der neue Diamant den Typ A oder B (siehe 15):
    Ist T ∊ {LL, RR}, wird ein neuer Diamant des Typs A erzeugt; ist T ∊ {LR, RL}, wird ein neuer Diamant des Typs B erzeugt.
  • 19a und 19b veranschaulichen die möglichen Ausgangssituationen für die Ausführung der Add-Funktion. Ein bestimmter Nachfolger des Netzpunkts V soll zum RTIN hinzugefügt werden. Die Indexnummer von V ist gegeben, sowie der Typ T des hinzuzufügenden Nachfolgers (dies sind die Eingabeparameter der Funktion Add). Weiterhin gegeben sind die L- und R-Vorgänger sowie die G- und W-Vorfahren von V, da diese direkt aus dem xDAG ausgelesen werden können (Die Netzpunkte L, R, G und W in der Abbildung). Die Netzpunkte C0, C1, C2 und C3 stellen die Netzpunkte dar, die durch die Ausführung der Funktion Add zum RTIN hinzugefügt werden können, wenn für den Eingabeparameter T entsprechend LL, LR, RL oder RR gewählt wird.
  • Liegt ein neuer Netzpunkt C ∊ {C0... C3} auf dem Rand des RTIN, so hat er nur einen Vorgänger, nämlich V. Der Netzpunkt C kann zum RTIN hinzugefügt werden, ohne dass dabei eine T-Stelle entsteht. Liegt C jedoch nicht auf dem Rand des RTIN, so hat er zwei Vorgänger; einer davon ist V. Wird jetzt nur C als Nachfolger von V in den xDAG eingetragen, so entsteht eine T-Stelle bei C. Um dies zu vermeiden, ist es notwendig, dass C auch als Nachfolger des „gegenüberliegenden" Vorgängers eingetragen wird. Die Netzpunkte V0*, V1*, V2* und V3* stellen jeweils die gegenüberliegenden Vorgänger der Netzpunkte C0, C1, C2 und C3 dar.
  • Im ersten Schritt muss für den neuen Netzpunkt C derjenige Netzpunkt V* ∊ {V0...V3} ermittelt werden, welcher den gegenüberliegenden Vorgänger von C darstellt. Aufgrund der Semantik des xDAG kann V* ohne zusätzlichen Rechenaufwand aus der Struktur des xDAG ausgelesen werden. Dazu wird zunächst der Netzpunkt ausgelesen, der als gemeinsamer Vorgänger von V und V* in Erscheinung tritt. Für T ∊ {LL, LR} ist dies immer der Netzpunkt L, für T ∊ {RL, RR} ist dies immer der Netzpunkt R. Danach muss der Nachfolger Typ (LL, LR, RL oder RR) bestimmt werden, der vom Netzpunkt L bzw. R zu V* führt. Für die Diamanttypen A und B lässt sich der Nachfolgertyp direkt aus der Struktur des xDAG ablesen. Um nun den Indexwert von V* aus dem xDAG auslesen zu können, muss zunächst der Typ des Diamanten von V bestimmt werden. Betrachtet man die Struktur der Diamanttypen A und B, so lassen sich folgende Aussagen treffen: V == L.LL ∧ V == R.RR Diamant von V ist Typ A V == L.RL ∧ V == R.LR Diamant von V ist Typ B (17)
  • Aufgrund der Nachfolgersymmetrie des xDAG aus (15) können diese Aussagen umgeschrieben werden: V == L.LL Diamant von V ist Typ A V == R.RR Diamant von V ist Typ A V == L.RL Diamant von V ist Typ B V == R.LR Diamant von V ist Typ B (18).
  • Aufgrund der Semantik des xDAG gilt: (V == L.LL ∧ V = R.RR) ⊕ (V == L.RL ⋀ V = R.LR), wobei ⊕ die XOR Verknüpfung darstellt. Dies führt zu: V == L.LL ⇔ V ≠ L.RL V == R.LR ⇔ V ≠ L.RR (19).
  • Zusammenfassend lassen sich nun für die Bestimmung des Typen des Diamanten von V folgende Bedingungen formulieren: Wenn V == L.LL ist, dann liegt Diamanttyp A vor, ansonsten liegt Typ B vor. Wenn V == R.LR ist, dann liegt Diamanttyp A vor, ansonsten liegt Typ B vor (20).
  • Es ist möglich, dass der Netzpunkt V auf dem Rand des RTIN liegt. In diesem Fall hat er nur einen Vorgänger (entweder den Netzpunkt L oder R in der Abbildung). Für die Bestimmung des Typen des Diamanten von V muss immer der Vorgänger verwendet werden, dessen Existenz garantiert ist: für T ∊ {LL, LR) ist dies der Netzpunkt L, für T ∊ {RL, RR) ist dies der Netzpunkt R.
  • Die Netzpunkte V0*...V3* lassen sich anhand der Struktur der Diamanttypen A und B folgendermaßen bestimmen:
    (21) Diamanttyp A: Diamanttyp B:
    V0* == L.LR V0* == L.RR
    V1* == L.RR V1* == L.LR
    V2* == R.LL V2* == R.RL
    V3* == R.RL V3* == R.LL
  • Wenn der Indexwert von V* gemäß den obigen Regeln aus dem xDAG ausgelesen wird, kann es zu drei Fällen kommen:
    • 1. Der ausgelesene Indexwert ist NULL.
    • 2. Der ausgelesene Indexwert ist VOID.
    • 3. Der ausgelesene Indexwert verweist auf einen existierenden Netzpunkt.
  • Im ersten Fall muss V* als neuer Netzpunkt zum RTIN hinzugefügt werden, bevor C hinzugefügt werden kann. Dies wird erreicht, indem die Add-Funktion rekursiv aufgerufen wird, um V* als Nachfolger des Netzpunkts L bzw. R zu erzeugen. Um beispielsweise den nicht existierenden Netzpunkt V2* für den Diamanttyp B zu erzeugen, würde die Funktion Add mit den Eingabeparametern V = R und T = RL aufgerufen werden.
  • Im zweiten Fall (der ausgelesene Indexwert für V* ist VOID) liegt C auf dem Rand des RTIN und der Netzpunkt V* existiert nicht. In diesem Fall müssen zwei Nachfolgerreferenzen und eine Vorgängerreferenz von C auf VOID gesetzt werden. Für T ∊ {LL, RL} müssen C.RL, C.RR und C.R auf VOID gesetzt werden, für T ∊ {LR, RR} müssen C.LL, C.LR und C.L auf VOID gesetzt werden.
  • Im dritten Fall liegt C nicht auf dem Rand des RTIN und der gegenüberliegende Vorgänger V* ist bereits im xDAG vorhanden. Da V und V* bekannt sind, kann die Add-Funktion ohne Rekursion fortfahren.
  • Um einen neuen Netzpunkt C* zu erzeugen, muss zunächst ein neuer Indexwert bestimmt werden. Die Art und Weise, wie ein neuer Indexwert bestimmt wird, ist nicht Bestandteil des hier beschriebenen Verfahrens. Eine einfache Lösung besteht jedoch darin, eine Liste zu verwalten, in der die noch nicht benutzten Indexwerte vermerkt sind. Nach der Initialisierung des Verfahrens würde eine solche Liste die Elemente {0... cmax–1} enthalten, wobei cmax die von der Anwendung bestimmte maximale Anzahl von Netzpunkten darstellt. Wird ein neuer Netzpunkt C* hinzugefügt, wird der erste Eintrag der Liste entnommen und als Indexwert für C* verwendet. Wird ein Netzpunkt aus dem xDAG entfernt, so wird dessen Indexwert am Ende der Liste wieder angefügt.
  • Wenn die Anzahl der verwendeten Netzpunkte gleich cmax ist, können keine weiteren Netzpunkte mehr hinzugefügt werden; die oben erwähnte Liste ist in diesem Fall leer. Tritt dieser Fall ein, so wird die Add-Funktion abgebrochen und es wird kein zusätzlicher Netzpunkt hinzugefügt, d. h. das Unterprogramm Add liefert als Resultat NULL zurück. Wird eine Add-Funktion abgebrochen, die den gegenüberliegenden Vorgänger V* erzeugen sollte, so wird die Add-Funktion, die den Netzpunkt C* erzeugen soll, ebenfalls abgebrochen. Damit ist gewährleistet, dass keine T-Stellen entstehen, wenn die maximale Anzahl von Netzpunkten cmax während der Ausführung der Add-Funktion erreicht wird.
  • Nachdem der Netzpunkt V* bestimmt wurde, kann der neue Netzpunkt C* in den xDAG eingetragen werden. Dazu muss jeweils eine Nachfolgerspalte von V und V* mit dem Indexwert von C* belegt werden, und die Spalten L, R, G und W von C* müssen belegt werden; die Nachfolgerspalten LL, LR, RL und RR von C* werden mit NULL initialisiert. Zusätzlich muss hierbei noch der Sonderfall berücksichtigt werden, dass V* nicht bestimmt werden konnte, da er außerhalb des RTIN liegen würde, d. h. V* = VOID. Aus der Semantik des xDAG lassen sich folgende Regeln für die Belegung der xDAG Spalten ableiten:
    (22) Add(V, LL): Add(V, LR): Add(V, RL): Add(V, RR):
    V.LL = C V.LR = C V.RL = C V.RR = C
    C.L = V C.R = V C.L = V C.R = V
    C.G = V.L C.G = V.L C.G = V.R C.G = V.R
    C.W = V.G C.W = V.W C.W = V.W C.W = V.G
  • Ist V* gleich VOID, so müssen zusätzlich folgende Eintragungen vorgenommen werden:
    (23) Add(V, LL): Add(V, LR): Add(V, RL): Add(V, RR):
    C.R = VOID C.L = VOID C.R = VOID C.L = VOID
    C.RL = VOID C.LL = VOID C.RL = VOID C.LL = VOID
    C.RR = VOID C.LR = VOID C.RR = VOID C.LR = VOID
  • Ist V* ungleich VOID, so müssen zusätzlich folgende Eintragungen vorgenommen werden:
    (24) Add(V, LL): Add(V, LR): Add(V, RL): Add(V, RR):
    V*.RR = C V*.RL = C V*.LR = C V*.LL = C
    C.R = V* C.L = V* C.R = V* C.L = V*
  • Damit ist die Aktualisierung des xDAG abgeschlossen, der neue Netzpunkt C* wurde zum RTIN hinzugefügt, und die T-Stellenfreiheit ist gewährleistet.
  • Abschließend muss nun der Höhenpunkt CH des Netzpunkts C ausgelesen werden, der Vertexpunkt CV des Netzpunkts C muss aus dem Höhenpunkt CH berechnet werden und der Vertexpunkt CV muss im Vertexspeicher 6a abgelegt werden. Diese Schritte werden von der Anwendung durchgeführt und sind nicht Bestandteil des hier beschriebenen Verfahrens. Dazu übermittelt Cloddy 8 die Indexwerte der Netzpunkte, die den Diamanten von C darstellen, an die Anwendung (dies sind die Netzpunkte C, C.L, C.R, C.G und C.W). Die Anwendung berechnet aus den übermittelten Indexwerten die Höhenkartenkoordinaten von C. Dazu kann sie beispielsweise eine Koordinatentabelle benutzen, in der sie die Höhenkartenkoordinaten der Höhenpunkte der bereits existierenden Netzpunkte ablegt hat (die Höhenkartenkoordinaten der Höhenpunkte der Netzpunkte der Startkonfiguration sind per Definition gegeben). Die Indexwerte der Netzpunkte geben dazu die Zeilennummer an. Bezogen auf eine zweidimensionale Höhenkarte können die Höhenkartenkoordinaten des Höhenpunkts CH beispielsweise durch die komponentenweise Bildung des arithmetischen Mittels der Höhenkartenkoordinaten der Höhenpunkte von C.L und C.R bzw. C.G und C.W berechnet werden. Nachdem die Anwendung die Höhenkartenkoordinaten von CH bestimmt hat, kann sie die Koordinatentabelle aktualisieren, den Höhenpunkt CH aus der Höhenkarte auslesen, den Vertexpunkt CV berechnen und CV im Vertexspeicher ablegen (die Speicheradresse entspricht dem Indexwert von C).
  • 20a, 20b, 20c und 20d zeigen den Ablauf der Add-Funktion für die möglichen Werte des Eingabeparameters T. Die Nummerierung der Einzelschritte ist in allen Abbildungen gleich. Der Eingabeparameter V enthält den Indexwert des Netzpunkts, dessen Nachfolger hinzugefügt werden soll. Die Add-Funktion überprüft als erstes, ob der angegebene Nachfolger bereits im xDAG als Netzpunkt vorhanden ist bzw. ob er auf VOID gesetzt ist, da er außerhalb des RTIN liegen würde (1). Ist dies der Fall, wird dessen Indexwert bzw. VOID zurückgeliefert und die Add-Funktion endet (2). Ansonsten muss ein neuer Netzpunkt hinzugefügt werden. Dazu wird zunächst der Typ des Diamanten von V anhand des oben beschriebenen Verfahrens bestimmt (4). Im folgenden Schritt wird der gegenüberliegende Vorgänger bestimmt (6, 8). Dazu wird die Add-Funktion rekursiv aufgerufen. Nachdem der gegenüberliegende Vorgänger bestimmt wurde, wird ein neuer Netzpunkt C entsprechend der obigen Beschreibung erstellt (9). Falls die maximale Anzahl von Netzpunkten erreicht ist und kein neuer Netzpunkt erstellt werden kann, wird C auf NULL gesetzt. Wenn dies der Fall ist (10), endet die Add Funktion und liefert als Resultat NULL zurück (11). Nachdem der neue Netzpunkt C erstellt wurde, wird er in den xDAG eingefügt. Dazu werden die Vorgänger und Vorfahren von C gemäß den oben beschriebenen Regeln gesetzt (5, 7, 12, 13, 14, 15). Anschließend wird der Netzpunkt C als Nachfolger von V eingetragen (16). Konnte der gegenüberliegende Vorgänger nicht bestimmt werden, weil er außerhalb des RTIN liegen würde (17), so müssen wie oben beschrieben eine Vorgänger- und zwei Nachfolgerreferenzen von C auf VOID gesetzt werden. Die Vorgängerreferenz wurde in diesem Fall bereits in Schritt (13) auf VOID gesetzt, die Schritte (18, 19) setzen die entsprechenden Nachfolgerreferenzen auf VOID. Ansonsten muss C als Nachfolger des gegenüberliegenden Vorgängers eingetragen werden (20). Danach endet die Add-Funktion, und es wird der Indexwert von C als Resultat zurückgeliefert (21).
  • Die Operation „Entfernen":
  • Die Entfernen-Operation löscht einen Netzpunkt aus dem xDAG und entfernt ihn damit aus dem RTIN. Sie besteht aus den Funktionen DeleteLeaf und Delete.
  • Die Funktion DeleteLeaf löscht einen Blattknoten, also einen Netzpunkt, der keine Nachfolger hat; die Funktion Delete löscht einen beliebigen Netzpunkt, unabhängig davon, wie viele Nachfolger dieser hat. Die Delete-Funktion baut auf der DeleteLeaf-Funktion auf.
  • Wenn der xDAG und damit das RTIN bereits die maximale Anzahl von Netzpunkten cmax enthält, so können keine weiteren Netzpunkte mit der Hinzufügen-Operation hinzugefügt werden. In diesem Fall müssen zunächst andere Netzpunkte mittels der Entfernen-Operation aus dem xDAG gelöscht werden. Dadurch werden Speicherstellen im xDAG frei; diese werden dann bei einer späteren Ausführung der Hinzufügen-Operation mit neuen Netzpunkten belegt (unter Verwendung desselben Indexwertes). Die Auswahl der Netzpunkte, die entfernt werden sollen, um Platz für neue Netzpunkte zu schaffen, ist nicht Bestandteil des hier beschriebenen Verfahrens. Es wird vorausgesetzt, dass die Anwendung ein geeignetes Verfahren implementiert. Hier können beispielsweise bekannte Verdrängungsstrategien für Cachespeicher benutzt werden, z. B. eine so genannte „least recently used" (LRU) Liste. Diese Liste enthält Netzpunkte, die mittels der Entfernen-Operation gelöscht werden, wenn die maximale Anzahl an Netzpunkten bereits erreicht ist und ein neuer Netzpunkt mittels der Hinzufügen-Operation zum xDAG hinzugefügt werden soll. Gelöscht wird jeweils der Netzpunkt, der am Anfang dieser Liste steht. Wird ein Netzpunkt für die Darstellung eines Einzelbildes benutzt (d. h. er liegt innerhalb des Blickwinkels des Betrachters und ist folglich auf dem Bildschirm sichtbar), so wird dieser Netzpunkt an das Ende der Liste verschoben. Auf diese Weise kann erreicht werden, dass möglichst derjenige Netzpunkt gelöscht wird, der die längste Zeit nicht sichtbar war. Bei der Visualisierung eines Planeten würde dies beispielsweise auf Netzpunkte zutreffen, die auf der gegenüberliegenden Seite des Planeten, bezogen auf die Position des Betrachters, liegen.
  • Um einen Netzpunkt V, der keine Nachfolger hat, aus dem xDAG zu löschen, ist es notwendig, dass alle eingehenden Referenzen, die auf V verweisen, gelöscht werden. Die eingehenden Referenzen sind die L- und R-Vorgänger von V. Im ersten Schritt müssen die Nachfolgerreferenzen von V.L und V.R, die auf V verweisen, auf NULL gesetzt werden. Danach kann V gelöscht werden, indem alle acht Spalten auf NULL gesetzt werden.
  • 21a beschreibt den Ablauf der DeleteLeaf-Funktion. Beim Aufruf der DeleteLeaf-Funktion wird der Indexwert des Netzpunkts V übermittelt, der aus dem xDAG entfernt werden soll. Zunächst wird der L-Vorgänger von V aus dem xDAG ausgelesen (1). Liegt V auf dem Rand des RTIN und der L-Vorgänger existiert nicht, weil er außerhalb des RTIN liegen würde, so wurde im xDAG bei der Ausführung der Hinzufügen-Operation bereits der Wert VOID eingetragen. Ist dies der Fall, wird bei der Bearbeitung des R-Vorgängers fortgesetzt (6). Wenn der L-Vorgänger existiert, muss zunächst die Nachfolgerreferenz bestimmt werden, über die der L-Vorgänger auf V verweist. Aufgrund der Semantik des xDAG kommen für den L-Vorgänger nur die Nachfolgerreferenzen LL und RL in Frage. In Schritt (3) wird bestimmt, welche Nachfolgerreferenz tatsächlich vorliegt. In den Schritten (4) und (5) wird die entsprechende Nachfolgerreferenz des L-Vorgängers von V auf NULL gesetzt. Die Bearbeitung des R-Vorgängers (6, 7, 8, 9, 10) geschieht analog zur Bearbeitung des L-Vorgängers. Nachdem die Bearbeitung der Vorgänger von V abgeschlossen ist, werden alle Einträge im xDAG von V auf NULL gesetzt. Die Nachfolgerreferenzen von V haben jeweils die Werte VOID (entsprechend der Semantik des xDAG werden Nachfolgerreferenzen auf VOID gesetzt, wenn ein Vorgänger auf VOID gesetzt ist) oder NULL, da V ein Blattknoten ist. Deshalb ist es nötig, alle Nachfolgerreferenzen von V auf NULL zu setzen.
  • Um einen Netzpunkt V aus dem xDAG zu löschen, der mindestens einen Nachfolger hat, werden zunächst alle Nachfolger von V aus dem xDAG gelöscht. Dadurch wird V zu einem Blattknoten und kann mittels der DeleteLeaf Funktion gelöscht werden. Die Nachfolger von V werden gelöscht, indem die Delete Funktion rekursiv auf V.LL, V.LR, V.RL und V.RR angewendet wird.
  • 21b zeigt den Ablauf der Delete-Funktion. Zunächst wird getestet, welche der vier Nachfolgerreferenzen von V gesetzt sind (1, 3, 5, 7). Dann wird die Delete-Funktion rekursiv für jeden existierenden Nachfolger von V aufgerufen (2, 4, 6, 8). Dadurch wird V zu einem Blattknoten, und er kann mittels der DeleteLeaf-Funktion aus dem xDAG gelöscht werden (9). Danach endet die Delete-Funktion (10).
  • Die Operation „Dreieckstreifen":
  • Die Dreieckstreifen-Operation führt eine Traversierung der Dreiecke des RTIN durch, dabei entsteht ein Triangle Strip Grafikprimitiv, das an die Grafikkarte 5 zur Darstellung übermittelt wird. Dies führt zur Visualisierung der Landschaft. Die Traversierung wird durchgeführt, indem der xDAG anhand des folgend beschriebenen Verfahrens durchlaufen wird. Die Sequenz der Indexwerte der dabei besuchten Netzpunkte bildet das Triangle Strip Grafikprimitiv. Der generierte Triangle Strip beinhaltet alle Dreiecke des RTIN; um dies zu erreichen ist es notwendig, dass an bestimmten Stellen Indexwerte doppelt in die Sequenz eingefügt werden [6, 14, 17]. Dabei ist weiterhin zu beachten, dass alle Dreiecke des Triangle Strip die gleiche Ausrichtung besitzen (bezogen auf die Draufsicht des RTIN). Die Ausrichtung eines Dreiecks entspricht der Drehrichtung der Bewegung vom ersten zum zweiten zum dritten Eckpunkt des Dreiecks. Üblicherweise wird die Ausrichtung eines Dreiecks mit CW („clockwise", im Uhrzeigersinn) und CCW („counter clockwise", gegen den Uhrzeigersinn) angegeben. Wird bei der Darstellung über die Grafikkarte das so genannte „backface culling" [15, 38] angewendet, so müssen alle Dreiecke des Grafikprimitivs die gleiche Ausrichtung haben, da sonst Darstellungsfehler auftreten. Besteht ein Dreieckstreifen beispielsweise aus den Vertexpunkten A, B, C, D, E und F, so generiert dies die Dreiecke ABC, BCD, CDE und DEF (siehe 22a). Die Ausrichtung der Dreiecke ABC und CDE ist CCW, wobei die Ausrichtung der Dreiecke BCD und DEF hingegen CW ist. Die Ausrichtung der Dreiecke eines Dreieckstreifens wechselt nach jedem Dreieck; diese Eigenschaft geht direkt aus der Definition des Triangle Strip Grafikprimitivs hervor. Die Grafikkarte invertiert deshalb die Ausrichtung jedes zweiten Dreiecks eines Dreieckstreifens automatisch, indem sie für die weitere Verarbeitung die ersten beiden Vertexpunkte tauscht [15, 38]. Damit wird erreicht, dass alle Dreiecke des Dreieckstreifens die gleiche Ausrichtung wie das erste Dreieck haben. Auf 22a bezogen würde die Grafikkarte also folgende Dreiecke ausgeben: ABC, CBD, CDE und EDF (einheitliche Ausrichtung CCW).
  • Eine Besonderheit der Dreieckstreifen-Operation ist die Tatsache, dass keine Berechnungen erforderlich sind, um zu bestimmen, welche Indexwerte doppelt übertragen werden müssen. Die Bestimmung der Indexwerte, die doppelt in die Sequenz aufgenommen werden müssen, ist stattdessen vollständig in der Art und Weise, in der der xDAG durchwandert wird, integriert. Existierende Verfahren benötigen hierfür zusätzliche Zustandsinformationen und Berechnungen, was die Performanz verringert [26, 37].
  • Bei der Traversierung werden die einzelnen Dreiecke des RTIN nacheinander besucht. Der Übergang von einem Dreieck zum nächsten erfolgt immer über die gemeinsame Kante der aufeinander folgenden Dreiecke. Betrachtet man ein geteiltes Dreieck im RTIN, dessen Teildreiecke jeweils noch ungeteilt sind, in Hinblick auf die Kanten, über die das Dreieck bei der Traversierung betreten und verlassen wird, so lassen sich die folgenden Fälle identifizieren [26]: Das Dreieck kann über eine Kathete (Seitenkante, im Folgenden mit „S" abgekürzt) oder die Hypotenuse (Bodenkante, im Folgenden mit „B" abgekürzt) betreten werden; ebenso kann das Dreieck über die S- oder B-Kante wieder verlassen werden. In 22b werden die vier möglichen Fälle dargestellt: SS, SB, BS und BB. Der erste Buchstabe gibt dabei die Eingangskante an, der zweite die Ausgangskante.
  • Für die Traversierung werden die Dreiecke des RTIN zu terminalen Dreiecken gruppiert. Ein terminales Dreieck besteht dabei aus zwei oder mehr zusammenhängenden Dreiecken des RTIN. In 23 wird der Aufbau eines solchen terminalen Dreiecks gezeigt. Das terminale Dreieck wird durch die Netzpunke ABC definiert, dabei ist D ein Nachfolger von A (entweder LL, LR, RL oder RR) und die Netzpunkte B und C stellen die G- und W-Vorfahren von D dar (dabei kann der Netzpunkt B entweder der G- oder W-Vorfahre von D sein, gleiches gilt für den Netzpunkt C). Kennzeichnend für ein terminales Dreieck ist die Tatsache, dass der Punkt N nicht existiert, d. h. im xDAG existiert kein entsprechender Eintrag und es existiert demnach auch kein zugehöriger Netzpunkt. Dies hat folgende Konsequenz: Die Verfeinerung des RTIN in der linken Hälfte (im Dreieck DCA) kann ausschließlich in Richtung des Netzpunkts C erfolgen; gleiches gilt für die rechte Hälfte (das Dreieck DAB), hier erfolgt die Verfeinerung des RTIN ausschließlich in Richtung des Netzpunkts B [26]. Die Netzpunkte E1, E2, ...En stellen die Teilungspunkte der Teildreiecke in der linken Hälfte dar, und die Netzpunkte F1, F2, ...Fm stellen die der rechten Hälfte dar; hierbei gilt n, m ∊ N0. Wenn n = 0 ist, dann besteht die linke Hälfte aus einem ungeteilten Dreieck DCA; gleiches gilt für die rechte Hälfte: ist m = 0, so besteht diese aus dem ungeteilten Dreieck DAB. Ist n ungerade, so liegt der Netzpunkt En auf der Strecke CA; ist n gerade, so liegt der Netzpunkt En auf der Strecke CD. Analog verhalten sich m und Fm.
  • Betrachtet man die Netzpunkte E1, E2, ...En und F1, F2, ...Fm sowie den Netzpunkt D, so lassen sich, bezogen auf die Beziehungen im xDAG, folgende Aussagen formulieren: E2·x-1-LR = E2·x, mit x ∊ N E2·x-RL = E2·x+1, mit x ∊ N D.LL = E1 ∨ D.RL = E1 F2·x-RL = F2·x, mit x ∊ N F2·x-1-LR = F2·x+1, mit x ∊ N D.LR = F1 ∨ D.RR = F1 (25)
  • Die terminalen Dreiecke des RTIN werden aneinander gereiht. Dies geschieht dadurch, dass zwei aufeinander folgende terminale Dreiecke über eine gemeinsame Kante miteinander verbunden werden. Das Prinzip der Eingangs- und Ausgangskanten aus 22b wird hierzu auf ein terminales Dreieck übertragen. Weiterhin muss die Laufrichtung spezifiziert werden, in der das terminale Dreieck durchlaufen werden soll (von Netzpunkt B zu Netzpunkt C oder umgekehrt). Die Laufrichtung wird angegeben, indem der Typ des Nachfolgers (LL, LR, RL oder RR) des Netzpunkts D benannt wird, welcher zu Netzpunkt E1 bzw. F1 führt. Ist der Typ LL oder RL, wird auf den Netzpunkt E1 verwiesen und die Laufrichtung ist C nach B (im Folgenden „nach rechts"). Ist der Typ LR oder RR, wird auf den Netzpunkt F, verwiesen und die Laufrichtung ist B nach C (im Folgenden „nach links).
  • Die Eingangs- und Ausgangskanten eines terminalen Dreiecks lassen sich wie folgt definieren: Sei K0 die Kante, die auf der Strecke CA liegt, K1 die Kante, die auf der Strecke BA liegt, K2 die Kante, die auf der Strecke CD liegt und K3 die Kante, die auf der Strecke BD liegt. Es gilt: K0 := (En-1+(nmod2), C) K1 := (Fm-1+(mmod2), B) K2 := (En-(nmod2), C) K3 := (Fm-(mmod2), B) (26)mit
    E0 = F0 = D
    E-1 = F-1 = A
  • In 23 ist K0 = (E5, C), K1 = (F5, B), K2 = (E6, C) und K3 = (F6, B), da n = m = 6.
  • Für einen gegebenen Fall SS, SB, BS und BB und eine gegebene Laufrichtung lässt sich nun die Zuordnung der Eingangs- und Ausgangskanten zu den Kanten K0...K3 folgendermaßen definieren:
    Fall Laufrichtung Eingangskante Ausgangskante
    SS nach rechts K0 K1
    SB nach rechts K0 K3
    BS nach rechts K2 K1
    BB nach rechts K2 K3
    SS nach links K1 K0
    SB nach links K1 K2
    BS nach links K3 K0
    BB nach links K3 K2
    Tabelle T9 – Zuordnung der Eingangs- und Ausgangskanten
  • Sei S die Menge der möglichen Kombinationen von Eingangs- und Ausgangskanten aus 22b. Weiterhin sei T die Menge der möglichen Laufrichtungen, angegeben über den Nachfolgertyp. Es gilt: S := (SS, SB, BS, BB) Γ := (LL, LR, RL, RR) (27)
  • Die Menge der möglichen Zustände bei der Traversierung (im Folgenden Traversierungszustand) von terminalen Dreiecken ist gegeben durch z ∊ S × Γ. Die Traversierung der Dreiecke des RTIN beginnt bei einem beliebigen, frei von der Anwendung 2 wählbaren Diamanten. Die Anwendung 2 bestimmt dazu einen Netzpunkt unter Angabe des Indexwertes. Die Traversierung beginnt dann bei den Dreiecken, die den zum Netzpunkt gehörigen Diamanten bilden.
  • Nicht alle bereits geteilten Dreiecken im RTIN sind terminale Dreiecke. Ein solches nicht-terminales Dreieck hat die Eigenschaft, dass – bezogen auf 23 – der Netzpunkt N existiert. Dies bedeutet: Die Netzpunkte E2, E4, En, F1, F3 und Fm-1 können einen RR-Nachfolger haben und die Netzpunkte E1, E3, En-1, F2, F4 und Fm können einen LL-Nachfolger haben. Ein beliebiges nicht-terminales Dreieck kann in eine Sequenz von terminalen Dreiecken umgewandelt werden: Dazu werden rekursiv das linke und rechte Teildreieck des nicht-terminalen Dreiecks besucht, bis ein terminales Dreieck gefunden wird. Die folgende Tabelle gibt an, wie – ausgehend von einem gegebenen nicht-terminalen Dreieck und eines gegebenen Traversierungszustands – der nächste Schritt der Rekursion bestimmt wird. Die Reihenfolge, in der die Teildreiecke besucht werden müssen, wird angegeben und die Traversierungszustände für das Besuchen der Teildreiecke werden spezifiziert. Soll das Dreieck nach rechts durchlaufen werden, so werden zuerst das linke und danach das rechte Teildreieck besucht. Wird das Dreieck nach links durchlaufen, so werden zuerst das rechte und danach das linke Teildreieck besucht.
    Nicht-terminales Dreieck ABC Linkes Teildreieck DCA Rechtes Teildreieck DAB Reihenfolge
    S ∊ S γ ∊ Γ s ∊ S γ ∊ Γ s ∊ S γ ∊ Γ L: nach links R: nach rechts
    SS LL BS LR SB RR L
    SS RL BS LR SB. RR L
    SB LL BS LR SS RR L
    SB RL BS LR SS RR L
    BS LL SS LR SB RR L
    BS RL SS LR SB RR L
    BB LL SS LR SS RR L
    BB RL SS LR SS RR L
    SS LR SB LL BS RL R
    SS RR SB LL BS RL R
    SB LR SS LL BS RL R
    SB RR SS LL BS RL R
    BS LR SB LL SS RL R
    BS RR SB LL SS RL R
    BB LR SS LL SS RL R
    BB RR SS LL SS RL R
    Tabelle T10 – Rekursionsvorschrift zur Sequenzbildung der terminalen Dreiecke
  • Auffällig ist, dass der Zustand BB niemals als Folgezustand bei der Traversierung auftritt. Wenn man die Startzustände der Traversierung entsprechen wählt, tritt der Zustand BB niemals auf; folglich müssen die Traversierungszustände BB-LL, BB-LR, BB-RL und BB-RR nicht berücksichtigt werden. Das Verfahren Cloddy arbeitet ausschließlich mit den restlichen 12 Traversierungszuständen.
  • Für jeden Traversierungszustand wird im Folgenden eine Reihenfolge definiert, in der die Netzpunkte des entsprechenden terminalen Dreiecks zum Dreieckstreifen hinzugefügt werden müssen, um eine korrekte Ausgabe zu erhalten. Die Reihenfolge pro Traversierungszustand ist immer gleich und kann fest einprogrammiert bzw. fest verdrahtet werden.
  • Die letzten beiden Netzpunkte des von der Dreieckstreifen-Operation erzeugten Dreieckstreifens DS bilden die aktuelle Kante der Traversierung. Die aktuelle Kante zeigt immer vom vorletzten Netzpunkt des Dreieckstreifens zum letzten Netzpunkt. Die Richtung der aktuellen Kante kann invertiert werden, indem der vorletzte Netzpunkt nochmals zum Dreieckstreifen hinzugefügt wird. Werden beispielsweise drei Netzpunkte A, B und C zum Dreieckstreifen hinzugefügt, so gilt: DS = {..., A, B, C}. Das zuletzt ausgegebene Dreieck ist ABC, und die aktuelle Kante ist BC. Um die Richtung der aktuellen Kante zu wechseln, bevor ein weiterer Netzpunkt D zum Dreieckstreifen hinzugefügt wird, muss B zuvor nochmals zum Dreieckstreifen hinzugefügt werden. Dadurch entsteht folgende Situation: DS = {..., A, B, C, B), und es wird ein weiteres Dreieck erzeugt: BCB. Dies ist ein so genanntes degeneriertes Dreieck und wird von der GPU ignoriert [6, 17]. Die neue aktuelle Kante ist nun CB. Wird jetzt D zum Dreieckstreifen hinzugefügt, gilt DS = {..., A, B, C, B, D), das Dreieck CBD wird ausgegeben und die neue aktuelle Kante ist BD.
  • Für die Traversierung eines terminalen Dreiecks wird folgende Startbedingung gestellt (bezogen auf 23): Die aktuelle Kante der Traversierung entspricht beim Betreten eines terminalen Dreiecks der verwendeten Eingangskante (K0, K1, K2 oder K3). (28)
  • Weiterhin wird folgende Endbedingung gestellt: Die aktuelle Kante der Traversierung entspricht beim Verlassen eines terminalen Dreiecks der verwendeten Ausgangskante (K0, K1, K2 oder K3). (29)
  • Beim Start der Dreieckstreifen-Operation wird der – noch leere – Dreieckstreifen initialisiert, d. h. es werden bestimmte Netzpunkte hinzugefügt, sodass die Startbedingung erfüllt ist. Weiterhin ist die Traversierung eines terminalen Dreiecks derart gestaltet, dass beim Verlassen des Dreieckes die aktuelle Kante der Traversierung der Ausgangskante des terminalen Dreiecks entspricht; damit ist die Endbedingung erfüllt. Da die Ausgangskante des vorherigen terminalen Dreiecks der Eingangskante des nächsten terminalen Dreiecks entspricht, ist die Startbedingung immer erfüllt.
  • Der Traversierungszustand z ∊ S × Γ des aktuell besuchten terminalen Dreiecks definiert die Eingangs- und Ausgangskante sowie die Laufrichtung, in der die Teildreiecke des terminalen Dreiecks besucht werden müssen. Für die Bildung des Dreieckstreifens ist zusätzlich von Bedeutung, wie viele Teildreiecke auf jeweils der linken und rechten Seite des terminalen Dreiecks existieren (siehe 23). Zunächst lassen sich vier Fälle angeben, bezogen auf die Teildreiecke des aktuellen terminalen Dreiecks:
    • 1. Das linke und rechte Teildreieck ist ungeteilt; es gilt n = m = 0.
    • 2. Das linke Teildreieck ist geteilt, das rechte ist ungeteilt; es gilt n > 0 ∧ m = 0.
    • 3. Das linke Teildreieck ist ungeteilt, das rechte ist geteilt; es gilt n = 0 ∧ m > 0.
    • 4. Das linke und rechte Teildreieck ist geteilt; es gilt n > 0 ∧ m > 0.
  • Der Fall 4 lässt sich zerlegen und durch die Fälle 2 und 3 darstellen (siehe 23). Dadurch wird es möglich, ohne Fall 4 auszukommen. Wird ein terminales Dreieck besucht, das Fall 4 entspricht, so wird die Rekursionsvorschrift aus Tabelle T10 ein weiteres Mal angewendet, d. h. die beiden Teildreiecke des terminalen Dreiecks werden nacheinander besucht. Da der Netzpunkt N nicht existiert, wird für die Teildreiecke niemals der Fall 4 auftreten. Cloddy berücksichtigt nur die Fälle 1, 2 und 3 und führt die Zerlegung von Fall 4 wie oben beschrieben durch.
  • Für die Fälle 2 und 3 ist zusätzlich noch relevant, ob der Netzpunkt En bzw. Fm (je nach Laufrichtung) auf der Eingangskante liegt oder nicht. Dies bestimmt, an welchen Stellen die aktuelle Kante der Traversierung invertiert werden muss.
  • Die folgende Tabelle fasst alle für die Bildung des Dreieckstreifens relevanten Informationen zusammen und gibt für jeden Fall die Reihenfolge an, in der die Netzpunkte des terminalen Dreiecks zum Dreieckstreifen hinzugefügt werden müssen. Die Tabelle benutzt dabei folgende Notation: [A, B], C, ..., D, [E, F]. Dies bedeutet, dass nacheinander die Netzpunkte A, B, C, D, E, F zum Dreieckstreifen hinzugefügt werden. „[A, B]" gibt die Eingangskante des aktuellen terminalen Dreiecks an; d. h. diese Netzpunkte wurden bereits beim Verlassen des vorherigen terminalen Dreiecks zum Dreieckstreifen hinzugefügt. „C, ..., D" gibt die Netzpunkte an, die zum Dreieckstreifen hinzugefügt werden müssen, um das aktuelle terminale Dreieck darzustellen. „[E, F]" gibt die Ausgangskante des aktuellen terminalen Dreiecks an. Diese Netzpunkte werden beim Verlassen des aktuellen terminalen Dreiecks zum Dreieckstreifen hinzugefügt und bilden gleichzeitig die Eingangskante des nächsten terminalen Dreiecks. „Ex...E1" mit x ≤ n bedeutet, dass nacheinander die Netzpunkte Ex, Ex-1, Ex-2, ..., E1 zum Dreieckstreifen hinzugefügt werden. Gleiches gilt für „Fy...F1" mit y ≤ m. „E1...Ex" mit x ≤ n bedeutet, dass nacheinander die Netzpunkte E1, E2, ..., Ex zum Dreieckstreifen hinzugefügt werden. Gleiches gilt für „F1...Fy" mit y ≤ m.
    Fall n = 0 ∧ n > 0 ∧ n > 0 ∧ n = ∧ n= 0 ∧
    m = 01) m = 0 ∧ m = 0 ∧ m > 0 ∧ m > 0 ∧
    En ∊ Kn 2) En ∊ K2 3) Fm ∊ K1 4) Fm ∊ K3 5)
    Für γ ∊ {LL, RL}, d. h. Laufrichtung nach rechts
    SS [A, C], [En, C], [En – 1, C], [A, C], [A, C],
    A, D, En...E1, En – 1, En...E1, A, D, A, D,
    D, D, F1...Fm – 1, F1...Fm,
    [A, B] [A, B] [A, B] [Fm, B] [Fm – 1, B]
    SB [A, C], [En, C], [En – 1, C], [A, C], [A, C],
    A, En...E1, En – 1, En...E1, A, D, A, D,
    D, A, D, A, F1...Fm, F1...Fm – 1,
    [D, B] [D, B] [D, B] [Fm – 1, B] [Fm, B]
    BS [D, C], [En – 1, C], [En, C], [D, C], [D, C],
    D, En – 1, En...E1, En...E1, D, D, A, D, D, A, D,
    D, F1...Fm – 1, F1...Fm,
    [A, B] [A, B] [A, B] [Fm, B] [Fm – 1, B]
    Für γ ∊ {LR, RR}, d. h. Laufrichtung nach links
    SS [A, B], [A, B], [A, B], [Fm, B], [Fm – 1, B],
    A, D, A, D, A, D, Fm...F1, Fm – 1, Fm...F1,
    E1...En – 1, E1...En, D, D,
    [A, C] [En, C] [En – 1, C] [A, C] [A, C]
    SB [A, B], [A, B], [A, B], [Fm, B], [Fm – 1, B],
    A, A, D, A, D, Fm...F1, Fm – 1, Fm...F1,
    E1...En, E1...En – 1, D, A, D, A,
    [D, C] [En – 1, C] [En, C] [D, C] [D, C]
    BS [D, B], [D, B], [D, B], [Fm – 1, B], [Fm, B],
    D, D, A, D, D, A, D, Fm – 1, Fm...F1, Fm...F1,
    E1...En-1, E1...En, D D,
    [A, C] [En, C] [En – 1, C] [A, C] [A, C]
    Tabelle T11 – Bildung des Dreieckstreifens für ein terminales Dreieck
    • 1) Linkes und rechtes Teildreieck ist ungeteilt.
    • 2) Linkes Teildreieck ist geteilt, rechtes Teildreieck ist ungeteilt. Der Netzpunkt En liegt aufkante K0.
    • 3) Linkes Teildreieck ist geteilt, rechtes Teildreieck ist ungeteilt. Der Netzpunkt En liegt auf Kante K2.
    • 4) Linkes Teildreieck ist ungeteilt, rechtes Teildreieck ist geteilt. Der Netzpunkt Fm liegt auf Kante K1.
    • 5) Linkes Teildreieck ist ungeteilt, rechtes Teildreieck ist geteilt. Der Netzpunkt Fm liegt auf Kante K3.
  • Die Zuordnung der Netzpunkte A, B, C und D aus 23 zu Netzpunkten im xDAG hängt von der Laufrichtung γ des besuchten terminalen Dreiecks ab. Sei V der Teilungspunkt eines terminalen Dreiecks; die folgende Tabelle zeigt dann die Zuordnungen für dieses Dreieck:
    γ ∊ Γ A B C D
    LL V.L V.W V.G V
    LR V.L V.G V.W V
    RL V.R V.G V.W V
    RR V.R V.W V.G V
    Tabelle T12 – Zuordnung der Netzpunkte eines terminalen Dreiecks zu xDAG
  • Die Netzpunkte En und Fm lassen sich anhand der oben beschriebenen Regeln aus dem Netzpunkt D ableiten.
  • Die Dreieckstreifen Operation wird gestartet, indem die Anwendung eine der Funktionen TriangleStripCCW (24a) oder TriangleStripCW (24b) aufruft. Die Anwendung übermittelt dabei den Indexwert eines Netzpunkts. Alle Dreiecke des RTIN, die innerhalb des Diamanten dieses Netzpunkts liegen, werden über den gebildeten Dreieckstreifen dargestellt.
  • In Schritt (1) wird der Dreieckstreifen initialisiert, damit die Startbedingung für die Traversierung des ersten terminalen Dreiecks erfüllt ist. Für jeden Traversierungszustand wird im Folgenden eine Funktion definiert, die die Rekursionsvorschrift des jeweiligen Zustands implementiert. Die Schritte (2) und (3) bilden dann die Sequenz, in der die terminalen Dreiecke des RTIN besucht werden müssen, und führen die Traversierung der besuchten terminalen Dreiecke durch. Die initialen Traversierungszustände sind dabei so gewählt, dass die Funktion TriangleStripCCW Dreiecke generiert, die allesamt die Ausrichtung CCW besitzen (bezogen auf die Draufsicht des RTIN), während die Funktion TriangleStripCW Dreieck mit der Ausrichtung CW erzeugt. Bei Schritt (4) ist die Erzeugung des Dreieckstreifens abgeschlossen, und die Dreieckstreifen Operation endet. Die Funktionen SS_LL, SS_LR, SS_RL, SS_RR, SB_LL, SB_LR, SB_RL, SB_RR, BS_LL, BS_LR, BS_RL und BS_RR (im Folgenden Traversierungsfunktionen) implementieren jeweils eine Rekursionsvorschrift aus Tabelle T10, um die Sequenz für das Besuchen der terminalen Dreiecke zu bestimmen (siehe 25a bis 25l). Die Rekursion endet, sobald ein terminales Dreieck gefunden wurde, für das gilt (siehe 23): n = 0 ∨ m = 0. Dann werden die Netzpunkte, die in Tabelle T11 für den jeweiligen Traversierungszustand angegeben sind, zum Dreieckstreifen hinzugefügt. Die Netzpunkte A, B, C und D eines terminalen Dreiecks (siehe 23) können direkt bestimmt werden: Der Teilungspunkt des aktuell besuchten terminalen Dreiecks ist bekannt und die Netzpunkte A, B und C sind Vorgänger bzw. Vorfahren von D und können somit unmittelbar aus dem xDAG ausgelesen werden (die Tabelle T12 gibt dazu die Zuordnungen zu den xDAG Spalten an). Die Nummerierung der Einzelschritte ist für alle Traversierungsfunktionen gleich, jedoch kommen nicht alle Einzelschritte in allen Traversierungsfunktionen vor. In Schritt (1) werden die Teilungspunkte der beiden Teildreiecke ausgelesen. C0 steht dabei für den Teilungspunkt des Teildreiecks, das zuerst besucht wird, und C, steht für den Teilungspunkt des Teildreiecks, das danach besucht wird. Schritt (2) sorgt dafür, dass die Rekursion solange fortgesetzt wird, bis gilt (siehe 23): n = 0 ∨ m = 0. Die Schritte (3) und (4) repräsentieren die Rekursionsvorschrift aus Tabelle T10 für den jeweiligen Traversierungszustand. Die Schritte (5), (8), (9), (10), (11), (12), (13), (14) und (15) fügen Netzpunkte entsprechend der Regeln aus Tabelle T11 an den Dreieckstreifen an. Die Netzpunkte A, B, C und D können unmittelbar unter Benutzung der Zuordnungen aus Tabelle T12 aus dem xDAG ausgelesen und an den Dreieckstreifen angehängt werden. Neben den Netzpunkten A, B, C und D eines terminalen Dreiecks müssen gemäß Tabelle T11 an bestimmten Stellen noch folgende Sequenzen von Netzpunkten ausgegeben werden (siehe 23 und Tabelle T11):
    • 1. E1...En
    • 2. E1 ...En, En-1
    • 3. En...E1
    • 4. En-1, En...E1
    • 5. F1...Fm
    • 6. F1...Fm, Fm-1
    • 7. Fm...F1
    • 8. Fm-1, Fm...F1.
  • Die Funktionen C0_LR, C0_LR_INV, C0_RL, C0_RL_INV, C1_LR, C1_LR_INV, C1_RL und C1_RL_INV (siehe 26a bis 26h) dienen dazu, diese Netzpunktsequenzen an den Dreieckstreifen anzuhängen (im Folgenden Sequenzfunktionen). Eine Sequenzfunktion besucht einen bestimmten Nachfolger des angegebenen Netzpunkts V; die Sequenzfunktionen rufen sich dabei gegenseitig rekursiv auf, wodurch eine Sequenz von Netzpunkten gebildet wird. Die Namensgebung der Sequenzfunktionen kann folgendermaßen interpretiert werden: Das Präfix „C0" bzw. „C1" gibt an, ob die auszugebende Netzpunktsequenz absteigend bzw. aufsteigend ist. Die oben genannten Sequenzen 1 und 5 sind aufsteigend, während die Sequenzen 3 und 7 absteigend sind. „LR" und „RL" geben den Nachfolgertyp des zu besuchenden Nachfolgers von V an. Das Suffix „INV" bedeutet, dass die aktuelle Kante der Traversierung invertiert wird, nachdem die Netzpunktsequenz bestimmt wurde (bei „CO" wird En-1 bzw. Fm-1 der Netzpunktsequenz vorangestellt, dadurch entstehen die Netzpunktsequenzen 4 und 8 – bei „C1" wird En-1 bzw. Fm-1 an die Netzpunktsequenz angehängt, dadurch entstehen die Netzpunktsequenzen 2 und 6). Die Nummerierung der Einzelschritte ist für alle Sequenzfunktionen gleich, jedoch kommen nicht alle Einzelschritte in allen Sequenzfunktionen vor. In Schritt (1) wird der zu besuchende Nachfolger aus dem xDAG ausgelesen. Die Netzpunktsequenz wird in den Schritten (2), (5) und (6) ausgegeben. In Schritt (3) wird überprüft, ob der zu besuchende Nachfolger im xDAG existiert. Schritt (4) fährt mit der Rekursion fort. Die folgende Tabelle beschreibt, welche Sequenzfunktion für welche der oben definierten Netzpunktsequenzen verwendet wird.
    Netzpunktsequenz E1...En E1...En, En-1 En...E1 En-1, En...E1
    Sequenzfunktion C1_LR (E1) C1_LR_INV (E1) C0_LR (E1) C0_LR_INV (E1)
    Netzpunktsequenz F1...Fm F1...Fm, Fm-1 Fm...F1 Fm-1, Fm...F1
    Sequenzfunktion C1_RL (F1) C1_RL_INV (F1) C0_RL (F1) C0_RL_INV (F1)
    Tabelle T13 – Bildung der Netzpunktsequenzen unter Benutzung der Sequenzfunktionen
  • Die Rekursion der Sequenzfunktionen C1_LR, C1_RL, C1_LR_INV und C1_RL_INV ist eine so genannte „tail-recursion", d. h. der Unterfunktionsaufruf, der die Rekursion erzeugt, ist die letzte Anweisung der aufrufenden Funktion. Eine solche Rekursion kann auch als Schleife innerhalb einer einzigen Funktion implementiert werden [26].
  • Literaturverzeichnis
    • [1] P. Cignoni, C. Montani, R. Scopigno. A Comparison of Mesh Simplification Algorithms Computers & Graphics 22(1), 37–54, 1998
    • [2] K. Baumann, J. Döllner, K. Hinrichs, O. Kersting. A Hybrid, Hierarchical Data Structure for Real-Time Terrain Visualization IEEE Computer Graphics International 99, 85–92. 1999.
    • [3] D. Hill. An Efficient, Hardware-Accelerated, Level-of-Detail Rendering Technique for Large Terrains Master's Thesis, University of Toronto. 2002
    • [4] P. Cignoni, F. Ganovelli, E. Gobetti, F. Marton, F. Ponchio, R. Scopigno. BDAM – Batched Dynamic Adaptive Meshes for High Performance Terrain Visualization Computer Graphics Forum 22(3)
    • [5] J. Bevins libnoise: Complex planetary surface example World Wide Web: http://libnoise.sourceforge.net/examples/complexplanet/index.html, 2005
    • [6] J. El-Sana, F. Evans, A. Kalaiah, A. Varshney, S. Skiena, E. Azanli. Efficiently Computing and Updating Triangle Strips for Real-Time Rendering Computer-Aided Design 32(13), 753–772. Nov 2000
    • [7] M. Garland, P. Heckbert. Fast polygonal approximation of terrains and height fields Tech. Rep. CMU-CS-95-181, Carnegie Mellon University. Sept. 1995
    • [8] J. Levenberg. Fast View-Dependent Level-of-Detail rendering using cached geometry Forthcoming. Mar. 2002
    • [9] T. Polack Focus On 3D Terrain Programming Premier Press, ISBN 1-59200-028-2, 2003
    • [10] F. Losasso, H. Hoppe. Geometry clipmaps: Terrain Rendering Using Nested Regular Grilds ACM SIGGRAPH 2004, 769–776. 2004
    • [11] J. Schneider, R. Westermann. GPU-Friendly High-Quality Terrain Rendering Journal of WSCG 14(1-3), 49–56. 2006
    • [12] J. P. Suárez, G. F. Carey, A. Plaza, M. A. Padrón. Graph Based Data Structures For Skeleton Based Refinement Algorithms Comm. Num. Meth. Eng. 17, 903–910. 2001.
    • [13] A. Persson Large planetary data visualization using ROAM 2.0 Linköpings University, Department of Science and Technology, 2005
    • [14] R. B. Pajarola. Large Scale Terrain Visualization Using the Restricted Quadtree Triangulation IEEE Visualization 98, 19–26. Oct. 1998
    • [15] Microsoft DirectX SDK April 2007 World Wide Web http://msdn.microsoft.com/directx, 2007
    • [16] M. de Berg, K. Dobrindt. On Levels of Detail in Terrains 11th Symposium on Computational Geometry, C26–C27. 1995
    • [17] F. Evans, S. S. Skiena, A. Varshney. Optimizing Triangle Strips For Fast Rendering IEEE Visualization 96, 319–326. Oct. 1996
    • [18] R. Pajarola. Overview of Quadtree-based Terrain Trianglulation and Visualization Tech. Rep. UCI-ICS TR 02–01, Department of Information, Computer Science University of California, Irvine. Jan. 2002
    • [19] P. Cignoni, F. Ganovelli, E. Gobetti, F. Marion, F. Ponchio, R. Scopigno. Planet-sized Batched Dynamic Adaptive Meshes (P-BDAM) IEEE Visualization 2003, 147–154. 2003
    • [20] M. Wand Point-Based Multi-Resolution Rendering Dissertation, Universität Tübingen, 17 Fakultät für Informations- und Kognitionswissenschaften, 2004
    • [21] R. Pajarola, M. Antonijuan, R. Lario QuadTIN: Quadtree based Triangulated Irregular Networks IEEE Visualization 2002, 395–402. 2002.
    • [22] H. Qu, F. Qiu, N. Zhang, A. Kaufman, M. Wan Ray Tracing Height Fields Computer Graphics International, 2003. Proceedings Volume, Issue, 9–11 July 2003 Page(s): 202–207
    • [23] S. Röttger, W. Heidrich, P. Slussallek, H.-P. Seidel. Real-Time Generation of Continuous Levels of Detail for Height Fields Proceedings of the 6th International Conference in Central Europe an Computer Graphics and Visualization, 315–322. Feb. 1998
    • [24] J. Olsen Realtime Procedural Terrain Generation University of Southern Denmark, Department of Mathematics And Computer Science, 2004
    • [25] B. D. Larsen, N. J. Christensen Real-time Terrain Rendering using Smooth Hardware Optimized Level of Detail Journal of WSCG, 11(1), 3–7. 2003
    • [26] B. András. Real-Time Visualization of Detailed Terrain Diplomarbeit, Universität Budapest.
    • [27] P. Lindstrom, D. Koller, W. Ribarsky, L.F. Hodges, N. Faust, G. Turner. Real-Time, Continuous Level of Detail Rendering of Height Fields SIGGRAPH 96, 109–118. Aug. 1996.
    • [28] J. P. Suárez, A. Plaza de la Hoz. Refinement and hierarchical coarsening schemes for triangluated surfaces Proceedings of 11th Internation Conference in Central Europe an Computer Graphics (WSCG 2003). 2003
    • [29] T. Ulrich. Rendering Massive Terrains Using Chunked Level of Detail ACM SIGGRAPH Course "Super-size it! Scaling up to Massive Virtual Worlds", 2000
    • [30] T. Lauritsen, S. L. Nielsen Rendering Very Large, Very Detailed Terrains Student project at the Danish Technical University, Informatics and Mathematical Modelling, 2005
    • [31] W. Evans, D. Kirkpatrick, G. Townsend. Right-Triangulated Irregular Networks Algorithmica 30(2): 264–286. Mar. 2001
    • [32] M. Duchaineau Roam algorithm version 2.0 – work in progress World Wide Web. http://www.cognigraph.com/ROAM homepage/ROAM2/
    • [33] A. Pomeranz. ROAM Using Surface Triangle Clusters (RUSTiC) Master's Thesis, University of California, Davis. Jun. 2000
    • [34] a) M. A. Duchaineau, M. Wolinsky, D. E. Sigeti, M. C. Miller, C. Aldrich, M. B. Mineev-Weinstein. ROAMing Terrain: Real-time Optimally Adapting Meshes IEEE Visualization 97, 81–88. Nov. 1997 b) D. E. Sigeti, M. Duchaineau, M. C. Miller, M. Wolinsky, C. Aldrich, M. B. Mineev-Weinstein Rapid Production Of Optimal-Quality Reduced-Resolution Representations Of Very Large Databases United States Patent US 6,208,997 B1 of Mar. 27, 2001
    • [35] D. Cline, P. K. Egbert. Terrain decimation through quadtree morphing IEEE Transactions on Visualization and Computer Graphics 7(1), 62–69. Jan.-Mar. 2001
    • [36] J. Blow. Terrain Rendering at High Levels of Detail Proceedings of Game Developer Conference 2000. 2000
    • [37] P. Lindstrom, V. Pascucci. Terrain Simplification Simplified: A General Framework for View-Dependent Out-of-Core Visualization IEEE Transactions on Visualization and Computer Graphics 8(3), 239–252. 2002
    • [38] M. Segal, K. Akeley The OpenGL Graphics System, A Specification (Version 1.5) World Wide Web http://www.opengl.org/documentation/specs/version1.5/glspec15.pdf, 2003
    • [39] B. Ben-Moshe, M. J. Katz, J. S. B. Mitchell, Y. Nir. Visibility Preserving Terrain Simplification SCG 2002: Proceedings of the 18th annual symposium on Computational geometry, 303–311. 2002
    • [40] P. Lindstrom, V. Pascucci. Visualization of Large Terrains Made Easy IEEE Visualization 2001, 363–370. Oct. 2001
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • - US 6208997 B1 [0210]
  • Zitierte Nicht-Patentliteratur
    • - P. Cignoni, C. Montani, R. Scopigno. A Comparison of Mesh Simplification Algorithms Computers & Graphics 22(1), 37–54, 1998 [0210]
    • - K. Baumann, J. Döllner, K. Hinrichs, O. Kersting. A Hybrid, Hierarchical Data Structure for Real-Time Terrain Visualization IEEE Computer Graphics International 99, 85–92. 1999 [0210]
    • - D. Hill. An Efficient, Hardware-Accelerated, Level-of-Detail Rendering Technique for Large Terrains Master's Thesis, University of Toronto. 2002 [0210]
    • - P. Cignoni, F. Ganovelli, E. Gobetti, F. Marton, F. Ponchio, R. Scopigno. BDAM – Batched Dynamic Adaptive Meshes for High Performance Terrain Visualization Computer Graphics Forum 22(3) [0210]
    • - J. Bevins libnoise: Complex planetary surface example World Wide Web: http://libnoise.sourceforge.net/examples/complexplanet/index.html, 2005 [0210]
    • - J. El-Sana, F. Evans, A. Kalaiah, A. Varshney, S. Skiena, E. Azanli. Efficiently Computing and Updating Triangle Strips for Real-Time Rendering Computer-Aided Design 32(13), 753–772. Nov 2000 [0210]
    • - M. Garland, P. Heckbert. Fast polygonal approximation of terrains and height fields Tech. Rep. CMU-CS-95-181, Carnegie Mellon University. Sept. 1995 [0210]
    • - J. Levenberg. Fast View-Dependent Level-of-Detail rendering using cached geometry Forthcoming. Mar. 2002 [0210]
    • - T. Polack Focus On 3D Terrain Programming Premier Press, ISBN 1-59200-028-2, 2003 [0210]
    • - F. Losasso, H. Hoppe. Geometry clipmaps: Terrain Rendering Using Nested Regular Grilds ACM SIGGRAPH 2004, 769–776. 2004 [0210]
    • - J. Schneider, R. Westermann. GPU-Friendly High-Quality Terrain Rendering Journal of WSCG 14(1-3), 49–56. 2006 [0210]
    • - J. P. Suárez, G. F. Carey, A. Plaza, M. A. Padrón. Graph Based Data Structures For Skeleton Based Refinement Algorithms Comm. Num. Meth. Eng. 17, 903–910. 2001 [0210]
    • - A. Persson Large planetary data visualization using ROAM 2.0 Linköpings University, Department of Science and Technology, 2005 [0210]
    • - R. B. Pajarola. Large Scale Terrain Visualization Using the Restricted Quadtree Triangulation IEEE Visualization 98, 19–26. Oct. 1998 [0210]
    • - Microsoft DirectX SDK April 2007 World Wide Web http://msdn.microsoft.com/directx, 2007 [0210]
    • - M. de Berg, K. Dobrindt. On Levels of Detail in Terrains 11th Symposium on Computational Geometry, C26–C27. 1995 [0210]
    • - F. Evans, S. S. Skiena, A. Varshney. Optimizing Triangle Strips For Fast Rendering IEEE Visualization 96, 319–326. Oct. 1996 [0210]
    • - R. Pajarola. Overview of Quadtree-based Terrain Trianglulation and Visualization Tech. Rep. UCI-ICS TR 02–01, Department of Information, Computer Science University of California, Irvine. Jan. 2002 [0210]
    • - P. Cignoni, F. Ganovelli, E. Gobetti, F. Marion, F. Ponchio, R. Scopigno. Planet-sized Batched Dynamic Adaptive Meshes (P-BDAM) IEEE Visualization 2003, 147–154. 2003 [0210]
    • - M. Wand Point-Based Multi-Resolution Rendering Dissertation, Universität Tübingen, 17 Fakultät für Informations- und Kognitionswissenschaften, 2004 [0210]
    • - R. Pajarola, M. Antonijuan, R. Lario QuadTIN: Quadtree based Triangulated Irregular Networks IEEE Visualization 2002, 395–402. 2002 [0210]
    • - H. Qu, F. Qiu, N. Zhang, A. Kaufman, M. Wan Ray Tracing Height Fields Computer Graphics International, 2003. Proceedings Volume, Issue, 9–11 July 2003 Page(s): 202–207 [0210]
    • - S. Röttger, W. Heidrich, P. Slussallek, H.-P. Seidel. Real-Time Generation of Continuous Levels of Detail for Height Fields Proceedings of the 6th International Conference in Central Europe an Computer Graphics and Visualization, 315–322. Feb. 1998 [0210]
    • - J. Olsen Realtime Procedural Terrain Generation University of Southern Denmark, Department of Mathematics And Computer Science, 2004 [0210]
    • - B. D. Larsen, N. J. Christensen Real-time Terrain Rendering using Smooth Hardware Optimized Level of Detail Journal of WSCG, 11(1), 3–7. 2003 [0210]
    • - B. András. Real-Time Visualization of Detailed Terrain Diplomarbeit, Universität Budapest [0210]
    • - P. Lindstrom, D. Koller, W. Ribarsky, L.F. Hodges, N. Faust, G. Turner. Real-Time, Continuous Level of Detail Rendering of Height Fields SIGGRAPH 96, 109–118. Aug. 1996 [0210]
    • - J. P. Suárez, A. Plaza de la Hoz. Refinement and hierarchical coarsening schemes for triangluated surfaces Proceedings of 11th Internation Conference in Central Europe an Computer Graphics (WSCG 2003). 2003 [0210]
    • - T. Ulrich. Rendering Massive Terrains Using Chunked Level of Detail ACM SIGGRAPH Course "Super-size it! Scaling up to Massive Virtual Worlds", 2000 [0210]
    • - T. Lauritsen, S. L. Nielsen Rendering Very Large, Very Detailed Terrains Student project at the Danish Technical University, Informatics and Mathematical Modelling, 2005 [0210]
    • - W. Evans, D. Kirkpatrick, G. Townsend. Right-Triangulated Irregular Networks Algorithmica 30(2): 264–286. Mar. 2001 [0210]
    • - M. Duchaineau Roam algorithm version 2.0 – work in progress World Wide Web. http://www.cognigraph.com/ROAM homepage/ROAM2/ [0210]
    • - A. Pomeranz. ROAM Using Surface Triangle Clusters (RUSTiC) Master's Thesis, University of California, Davis. Jun. 2000 [0210]
    • - M. A. Duchaineau, M. Wolinsky, D. E. Sigeti, M. C. Miller, C. Aldrich, M. B. Mineev-Weinstein. ROAMing Terrain: Real-time Optimally Adapting Meshes IEEE Visualization 97, 81–88. Nov. 1997 [0210]
    • - D. Cline, P. K. Egbert. Terrain decimation through quadtree morphing IEEE Transactions on Visualization and Computer Graphics 7(1), 62–69. Jan.-Mar. 2001 [0210]
    • - J. Blow. Terrain Rendering at High Levels of Detail Proceedings of Game Developer Conference 2000. 2000 [0210]
    • - P. Lindstrom, V. Pascucci. Terrain Simplification Simplified: A General Framework for View-Dependent Out-of-Core Visualization IEEE Transactions on Visualization and Computer Graphics 8(3), 239–252. 2002 [0210]
    • - M. Segal, K. Akeley The OpenGL Graphics System, A Specification (Version 1.5) World Wide Web http://www.opengl.org/documentation/specs/version1.5/glspec15.pdf, 2003 [0210]
    • - B. Ben-Moshe, M. J. Katz, J. S. B. Mitchell, Y. Nir. Visibility Preserving Terrain Simplification SCG 2002: Proceedings of the 18th annual symposium on Computational geometry, 303–311. 2002 [0210]
    • - P. Lindstrom, V. Pascucci. Visualization of Large Terrains Made Easy IEEE Visualization 2001, 363–370. Oct. 2001 [0210]

Claims (24)

  1. Verfahren zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, die in Form einer Höhenkarte zur Verfügung gestellt wird, auf einem zur Ausgabe von dreidimensionalen Darstellungen fähigen Ausgabengerät, insbesondere einem grafischen Bildschirm, unter Anwendung eines einen Hauptspeicher aufweisenden Rechners, einer einen Grafikspeicher aufweisenden Grafikkarte und einer Anwendung in Form eines im Rechner zu speichernden und vom Rechner auszuführenden Programms, das Verfahrensvorschriften einschließlich Sichtbarkeitskriterien zur Verarbeitung von die Höhenkarte bildenden Höhenpunkten festlegt, enthaltend die folgenden Schritte: – Bestimmung der für einen ausgewählten Ausschnitt und Detaillierungsgrad der Landschaft relevanten Höhenpunkte durch die Anwendung unter Verwendung eines Sichtbarkeitskriteriums, – Bildung eines RTIN aus rechtwinkligen Dreiecken und durch diese gebildeten Diamanten, wobei das RTIN mindestens die relevanten Höhenpunkte repräsentierende Netzpunkte enthält und über eine Datenstruktur verwaltet wird, – Verfeinerung oder Vereinfachung des gebildeten RTIN durch Teilung von Dreiecken oder durch Zusammenführung von vier Dreiecken eines Diamanten zu zwei Dreiecken unter Entfernung des Mittelpunkts des Diamanten, wobei das aus der Verfeinerung oder Vereinfachung resultierende RTIN frei von T-Stellen ist, – Berechnung von Vertexpunkten durch die Anwendung, wobei diese Vertexpunkte den im resultierenden RTIN enthaltenen Netzpunkten zugeordnet sind, die von der Grafikkarte zur Darstellung der Landschaft benötigten Informationen enthalten und im Grafikspeicher der Grafikkarte gespeichert werden, – Berechnung von mindestens einem Grafikprimitiv durch die Anwendung, wobei das Grafikprimitiv die Dreiecke des RTIN abbildet, – Übermittlung des Grafikprimitivs an die Grafikkarte zur Darstellung, und – Darstellung der Landschaft auf dem Ausgabegerät unter Verwendung der im Grafikprimitiv enthaltenen Informationen, dadurch gekennzeichnet, dass – die für den Aufbau des RTIN verwendeten Netzpunkte über Indexwerte (Adressen) verwaltet werden, – ausgehend von der Höhenkarte eine Startkonfiguration gebildet wird, die die minimale Menge von Höhenpunkten festlegt, die zur Bildung eines die gesamte Höhenkarte umfassenden, von T-Stellen freien RTIN benötigt werden, – die Vertexpunkte der im RTIN enthaltenen Netzpunkte im Grafikspeicher der Grafikkarte unter den Indexwerten zugeordneten Speicheradressen gespeichert werden, – die Berechnung des Grafikprimitivs unter Benutzung der Indexwerte der im RTIN enthaltenen Netzpunkte erfolgt und – die Darstellung der Landschaft anhand derjenigen Vertexpunkte erfolgt, deren Speicheradressen durch die vom Grafikprimitiv übermittelten Indexwerte festgelegt werden.
  2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass – als Grafikprimitiv wenigstens ein Dreieckstreifen berechnet wird, der alle Dreiecke innerhalb eines von der Anwendung frei wählbaren Diamanten des RTIN enthält.
  3. Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass – die Datenstruktur für die Startkonfiguration, die Dreieckteilungen, die Dreieckszusammenführungen und die Bildung der Grafikprimitive so definiert werden, dass keine Vorberechnungsphase erforderlich ist.
  4. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass – die Startkonfiguration für eine in Form eines Quadrats definierte Höhenkarte aus einem Diamanten besteht und die Datenstruktur so definiert wird, dass kein Zusatzaufwand in Form von Rechenaufwand oder Speicherbedarf für die Erkennung und Behandlung von Kanten im RTIN, die auf dem Rand der Höhenkarte liegen, notwendig ist.
  5. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass – die Startkonfiguration für eine in Form eines Oktaeders definierte Höhenkarte aus zwei über gemeinsame Kanten miteinander verbundenen Diamanten besteht und die Datenstruktur so definiert wird, das kein Zusatzaufwand in Form von Rechenaufwand oder Speicherbedarf für Gewährleistung der Freiheit von T-Stellen an den gemeinsamen Kanten der in der Startkonfiguration enthaltenen Diamanten notwendig ist.
  6. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass – die Startkonfiguration für eine in Form eines Würfels definierte Höhenkarte aus sechs über gemeinsame Kanten miteinander verbundenen Diamanten besteht und die Datenstruktur so definiert wird, das kein Zusatzaufwand in Form von Rechenaufwand oder Speicherbedarf für die Gewährleistung der Freiheit von T-Stellen an den gemeinsamen Kanten der in der Startkonfiguration enthaltenen Diamanten notwendig ist.
  7. Verfahren nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet, dass – die Datenstruktur so definiert wird, dass jedem im RTIN enthaltenem Netzpunkt acht Referenzen in Form von vier Vorgängern und vier Nachfolgern auf andere Netzpunkte zugeordnet sind, wobei die Referenzen den Aufbau des RTIN widerspiegeln und die Indexwerte der Netzpunkte angeben, auf die sie verweisen.
  8. Verfahren nach Anspruch 7, dadurch gekennzeichnet, dass – die Indexwerte der acht Referenzen der Netzpunkte im Hauptspeicher des Rechners abgelegt werden, – über eine Semantik diesen acht Referenzen eine Bedeutung zugewiesen wird, die die geometrische Lage der zugehörigen Netzpunkte innerhalb des RTIN widerspiegelt, und – aufbauend auf der Semantik für die acht Referenzen eine Syntax verwendet wird, die Regeln angibt, nach denen die Referenzen mit den Indexwerten belegt werden müssen.
  9. Verfahren nach einem der Ansprüche 1 bis 8, dadurch gekennzeichnet, dass – Dreiecksteilungen zur Erfüllung harter Echtzeitbedingungen auf einem Prozessor bzw. Schaltkreis unter Anwendung der folgenden Befehle durchgeführt werden: Auslesen des Wertes einer Referenz eines Netzpunkts aus dem Hauptspeicher des Rechners, Setzen des Wertes einer Referenz eines Netzpunkts im Hauptspeicher des Rechners, Test zweier Indexwerte auf Gleichheit bzw. Ungleichheit, bedingter Sprungbefehl, Unterprogrammaufruf, Legen eines Indexwertes auf einen Stapelspeicher und Holen eines Indexwertes aus einem Stapelspeicher.
  10. Verfahren nach einem der Ansprüche 1 bis 9, dadurch gekennzeichnet, dass – das Zusammenführen von Dreiecken zur Erfüllung harter Echtzeitbedingungen auf einem Prozessor bzw. Schaltkreis unter Anwendung der folgenden Befehle durchgeführt wird: Auslesen des Wertes einer Referenz eines Netzpunkts aus dem Hauptspeicher des Rechners, Setzen des Wertes einer Referenz eines Höhenpunkts im Speicher des Rechners, Test zweier Indexwerte auf Gleichheit bzw. Ungleichheit, bedingter Sprungbefehl, Unterprogrammaufruf, Legen eines Indexwertes auf einen Stapelspeicher und Holen eines Indexwertes aus einem Stapelspeicher.
  11. Verfahren nach Anspruch 10, dadurch gekennzeichnet, dass – jeder beliebige Netzpunkt aus dem RTIN entfernt werden kann, indem der Mittelpunkt des zugehörigen Diamanten entfernt wird, nachdem alle in diesem Diamanten liegenden Dreiecke zusammengeführt wurden.
  12. Verfahren nach einem der Ansprüche 1 bis 11, dadurch gekennzeichnet, dass – die Erzeugung eines Dreieckstreifens, der alle Dreiecke innerhalb eines von der Anwendung frei wählbaren Diamanten des RTIN enthält, zur Erfüllung harter Echtzeitbedingungen auf einem Prozessor bzw. Schaltkreis unter Anwendung der folgenden Befehle durchgeführt wird: Auslesen des Wertes einer Referenz eines Netzpunkts aus dem Hauptspeicher des Rechners, Test zweier Indexwerte auf Gleichheit bzw. Ungleichheit, bedingter Sprungbefehl, Unterprogrammaufruf, Legen eines Indexwertes auf einen Stapelspeicher, Holen eines Indexwertes aus einem Stapelspeicher und Anhängen eines Vertexpunkts an den Dreieckstreifen durch Angabe des Indexwertes des zugehörigen Netzpunkts.
  13. Verfahren nach einem der Ansprüche 7 bis 12, dadurch gekennzeichnet, dass – einem Netzpunkt die folgenden acht Referenzen zugeordnet werden: – L = „Linker Vorgänger" – R = „Rechter Vorgänger" – G = „Gemeinsamer Vorfahre" – W = „Wurzel Vorfahre" – LL = „Nachfolger links-links" – LR = „Nachfolger links-rechts" – RL = „Nachfolger rechts-links" – RR = „Nachfolger rechts-rechts"; – der spezielle Indexwert NULL verwendet wird, um noch nicht gesetzte Nachfolgerreferenzen zu markieren; – der spezielle Indexwert VOID verwendet wird, um Referenzen zu sperren, die auf Höhenpunkte verweisen, die außerhalb der Höhenkarte liegen; – die folgende Semantik für die Referenzen L, R, G, W, LL, LR, RL und RR verwendet wird: – die bei der Definition der Netzpunktreferenzen genannten Bezeichnungen „links" und „rechts" geben einen Hinweis auf die geometrische Lage von Teilungspunkten (siehe 14a) und werden, ausgehend von einem bereits geteilten Dreieck T mit dem Teilungspunkt A und den Teildreiecken T0 und T1 mit den Teilungspunkten B und C, folgendermaßen interpretiert: den Vektor AB erhält man, indem man den Vektor SA um 45° nach links dreht und mit –√1/2 multipliziert, den Vektor AC erhält man, indem man den Vektor AS um 45° nach rechts dreht und mit –√1/2 multipliziert; auf die Dreiecke T, T1 und T0 bezogen ist T0 das linke Teildreieck von T ist und T1 das rechte Teildreieck von T, was sich rekursiv auf die Teildreiecke T0 und T1 anwenden lässt, d. h. geht man beispielsweise vom Dreieck ADS aus und teilt dessen Teildreiecke BSA und BAD, so erhält man die gleiche Konfiguration wie zu Beginn, nur die Bezeichnungen der Dreiecke und Netzpunkte ändern sich; – 14b veranschaulicht die Bedeutung des L-Vorgängers: Ausgangspunkt ist ein Dreieck im RTIN, das durch die Netzpunkte SED definiert ist, und der Netzpunkt A ist der Teilungspunkt des Dreiecks SED; in der Datenstruktur (xDAG) ist der Netzpunkt A ein Nachfolger vom Netzpunkt S, und der Netzpunkt B ist der Teilungspunkt, der durch die Teilung des linken Teildreiecks von SED entsteht; in der Datenstruktur (xDAG) wird der Netzpunkt A daher als L-Vorgänger des Netzpunkts B eingetragen; – 14c veranschaulicht die Bedeutung des R-Vorgängers: Ausgangspunkt ist ein Dreieck im RTIN, das durch die Netzpunkte SED definiert ist, und der Netzpunkt A ist der Teilungspunkt des Dreiecks SED; in der Datenstruktur (xDAG) ist der Netzpunkt A ein Nachfolger vom Netzpunkt S, und der Netzpunkt C ist der Teilungspunkt, der durch die Teilung des rechten Teildreiecks von SED entsteht; in der Datenstruktur (xDAG) wird der Netzpunkt A daher als R-Vorgänger des Netzpunkts C eingetragen; – 14d veranschaulicht die Bedeutung des G-Vorfahren: Ausgangspunkt ist ein Dreieck im RTIN, das durch die Netzpunkte SED definiert ist und durch den Netzpunkt A bereits in die Teildreiecke ADS und ASE geteilt wurde; weiterhin wurden das linke Teildreieck ADS und das rechte Teildreieck ASE durch Netzpunkte B und C bereits geteilt; der Netzpunkt F ist ein Nachfolger der Netzpunkte B und C; die Netzpunkte B und C sind Nachfolger des Netzpunkts A; seien vb und vc die Mengen, die die Vorgänger der Netzpunkte B bzw. C enthalten, dann enthält die Schnittmenge vb ⋂ vc nur ein Element, nämlich den Netzpunkt A; der Netzpunkt A ist also der gemeinsame Vorgänger der Netzpunkte B und C, und diese stellen die beiden Vorgänger des Netzpunkts F dar; in der Datenstruktur (xDAG) wird der Netzpunkt A daher als G-Vorfahre des Netzpunkts F eingetragen; – der W-Vorfahre lässt sich anhand der Betrachtung des Diamanten des Netzpunkts F bestimmen (siehe 14d); der Diamant des Netzpunkts F besteht aus den Netzpunkten A, B, C, S und F; dabei stellen die Netzpunkte A, B und C den G-Vorfahren, den L-Vorgänger und den R-Vorgänger des Netzpunkts F dar; der Netzpunkt S ist der einzige Netzpunkt des Diamanten, der noch nicht in der Datenstruktur (xDAG) abgebildet ist, weshalb der Netzpunkt S als W-Vorfahre des Netzpunkts F eingetragen wird; – die 14e veranschaulicht die Bedeutung des LL-Nachfolgers: Ausgangspunkt ist ein Dreieck im RTIN, das durch die Netzpunkte SED definiert ist und durch den Netzpunkt A bereits geteilt wurde; anschließend wurde das linke Teildreieck ADS durch den Teilungspunkt B und danach das dadurch erhaltene linke Teildreieck BSA geteilt; dadurch entsteht der Teilungspunkt F; in der Datenstruktur (xDAG) wird der Netzpunkt F daher als LL-Nachfolger des Netzpunkts B eingetragen; – die 14f veranschaulicht die Bedeutung des LR-Nachfolgers: Ausgangspunkt ist ein Dreieck im RTIN, das durch die Netzpunkte SED definiert ist und durch den Netzpunkt A bereits geteilt wurde; anschließend wurde das linke Teildreieck von ADS durch den Teilungspunkt B und danach das dadurch erhaltene rechte Teildreieck BAD geteilt; dadurch entsteht der Teilungspunkt H; in der Datenstruktur (xDAG) wird der Netzpunkt H daher als LR-Nachfolger des Netzpunkts B eingetragen; – die 14g veranschaulicht die Bedeutung des RL-Nachfolgers: Ausgangspunkt ist ein Dreieck im RTIN, das durch die Netzpunkte SED definiert ist und durch den Netzpunkt A bereits geteilt wurde; anschließend wurde das rechte Teildreieck ASE durch den Teilungspunkt C und danach das dadurch erhaltene linke Teildreieck CEA geteilt; dadurch entsteht der Teilungspunkt K; in der Datenstruktur (xDAG) wird der Netzpunkt K daher als RL-Nachfolger des Netzpunkts C eingetragen; – die 14h veranschaulicht die Bedeutung des RR-Nachfolgers: Ausgangspunkt ist ein Dreieck im RTIN, das durch die Netzpunkte SED definiert ist und durch den Teilungspunkt A bereits geteilt wurde; anschließend wird das rechte Teildreieck ASE durch den Teilungspunkt C und danach das rechte Teildreieck CAS geteilt; dadurch entsteht der Teilungspunkt F; in der Datenstruktur (xDAG) wird der Netzpunkt F daher als RR-Nachfolger des Netzpunkts C eingetragen; und – die folgende Syntax für die Belegung der Referenzen L, R, G, W, LL, LR, RL und RR definiert wird: – bei der Belegung der Vorgänger- und Nachfolgerreferenzen der Datenstruktur (xDAG) gelten die folgenden Restriktionen: seien A, B und C Punkte aus der Datenstruktur (xDAG), angegeben durch ihren Indexwert, dann gilt: B == A.L ⇔ A == B.LL ∨ A == B.RL B == A.R ⇔ A == B.LR ∨ A == B.RR B == A.LL ∨ B == A.LR ⇒ B.G == A.L B == A.RL ∨ B == A.RR ⇒ B.G == A.R B == A.LL ∨ B == A.RR ⇒ B.W == A.G B == A.LR ∨ B == A.RL ⇒ B.W == A.W A == C.L ⇒ B == C.R ⇒(C == A.LL ∧ C == B.RR) ∨ (C == A.RL ∧ C == B.LR) A.L = VOID ⇒ ALL = VOID ∧ A.LR = VOID A.R = VOID ⇒ A.RL = VOID ∧ A.RR = VOID, – weiterhin folgende Regeln gelten, bezogen auf ein bereits geteiltes Dreieck im RTIN (siehe 14a): A == S.LL ∨ A == S.RL ⇒ B == A.LL ∧ C == A.LR A == S.LR ∨ A == S.RR ⇒ B == A.RL ∧ C == A.RR, – in der Datenstruktur (xDAG) zwei verschiedene Typen von Diamanten definiert werden, die aus der besonderen Semantik der Datenstruktur (xDAG) hervorgehen, wie in der 15 veranschaulicht ist; der Netzpunkt M stellt den Mittelpunkt eines Diamanten in der Datenstruktur (xDAG) dar; die Netzpunkte L, R, G und W stellen die L-, R-Vorgänger, G- und W-Vorfahren von M dar; zwischen den Netzpunkten M, L, R, G und W bestehen folgende Beziehungen: – Diamanttyp A: G ist der LL-, LR-, RL- oder RR-Nachfolger W, entsprechend ist W der L- oder R-Vorgänger von G; L ist der LL- oder RL-Nachfolger von G, entsprechend ist G der L-Vorgänger von L; R ist der LR- oder RR-Nachfolger von G, entsprechend ist G der R-Vorgänger von R; M ist der LL-Nachfolger von L, entsprechend ist L der L-Vorgänger von M; M ist der RR-Nachfolger von R, entsprechend ist R der R-Vorgänger von M; – Diamanttyp B: L ist der LR- oder RR-Nachfolger von G, entsprechend ist G der R-Vorgänger von L; R ist der LL- oder RL-Nachfolger von G, entsprechend ist G der L-Vorgänger von R; M ist der RL-Nachfolger von L, entsprechend ist L der L-Vorgänger von M; M ist der LR-Nachfolger von R, entsprechend ist R der R-Vorgänger von M; – aus der Struktur der Diamanttypen A und B werden folgende Aussagen, bezogen auf die Netzpunkte L, R und M abgeleitet (im Folgenden Nachfolgersymmetrie): M == L.LL ⇔ M == R.RR M == L.RL ⇔ M == R.LR,
  14. Verfahren nach einem der Ansprüche 4 bis 12, dadurch gekennzeichnet, dass – die Startkonfiguration „Quadrat" wie folgt definiert und verwendet wird (siehe 16), wobei die folgende Tabelle die Werte der Referenzen der Höhenpunkte der Startkonfiguration „Quadrat" zeigt: IDX L R G W LL LR RL RR 0 VOID VOID VOID VOID 1 VOID VOID VOID 1 0 VOID VOID VOID 2 3 VOID VOID 2 1 VOID 0 VOID 4 VOID VOID VOID 3 VOID 1 0 VOID VOID VOID VOID 4 4 2 3 1 0 NULL NULL NULL NULL
    Tabelle T3 – Startkonfiguration „Quadrat", – die folgende Tabelle exemplarisch die Koordinaten der entsprechenden Höhenpunkte für eine diskrete quadratische zweidimensionale Höhenkarte der Größe n zeigt:
    Figure 00870001
    Tabelle T4 – Startkonfiguration „Quadrat" – Koordinaten der Hohenpunkte, – der Netzpunkt 4 als Startpunkt für die weitere Verfeinerung des RTIN dient.
  15. Verfahren nach einem der Ansprüche 5 bis 12, dadurch gekennzeichnet, dass – die Startkonfiguration „Oktaeder" wie folgt definiert und verwendet wird (siehe 17), wobei die folgende Tabelle die Werte der Referenzen der der Startkonfiguration „Oktaeder" zeigt: IDX L R G W LL LR RL RR 0 VOID VOID VOID VOID 2 VOID VOID VOID 1 2 VOID VOID VOID 5 4 5 4 2 0 VOID VOID VOID 3 1 3 1 3 2 VOID VOID VOID 4 5 4 5 4 3 1 2 0 NULL NULL NULL NULL 5 1 3 2 0 NULL NULL NULL NULL
    Tabelle T5 – Startkonfiguration „Oktaeder", – die folgende Tabelle exemplarisch die Koordinaten der entsprechende Höhenpunkte für eine dreidimensionale Höhenkarte zeigt:
    Figure 00880001
    Tabelle T6 – Startkonfiguration „Oktaeder" – Koordinaten der Höhenpunkte, – die Netzpunkte 4 und 5 als Startpunkte für die weitere Verfeinerung des RTIN dienen, wobei der Netzpunkt 4 das Zentrum der oberen Hemisphäre darstellt und Netzpunkt 5 das Zentrum der unteren Hemisphäre.
  16. Verfahren nach einem der Ansprüche 6 bis 12, dadurch gekennzeichnet, dass – die Startkonfiguration „Würfel" wie folgt definiert und verwendet wird (siehe 18), wobei die folgende Tabelle die Werte der Referenzen der Höhenpunkte der Startkonfiguration „Würfel" zeigt: IDX L R G W LL LR RL RR 0 VOID VOID VOID VOID VOID VOID VOID VOID 1 VOID 2 VOID VOID 12 VOID 9 8 2 VOID VOID VOID VOID VOID VOID VOID VOID 3 7 VOID VOID VOID 13 11 8 VOID 4 VOID 7 VOID VOID VOID 12 11 10 5 VOID VOID VOID VOID VOID VOID VOID VOID 6 7 VOID VOID VOID 10 13 VOID 9 7 VOID VOID VOID VOID VOID VOID VOID VOID 8 3 1 2 0 14 NULL NULL NULL 9 1 6 2 5 NULL 15 NULL 16 10 6 4 7 5 NULL NULL 17 NULL 11 4 3 7 0 NULL NULL NULL NULL 12 1 4 5 0 15 NULL NULL 17 13 3 6 7 2 NULL 14 16 NULL 14 8 13 3 2 NULL NULL NULL NULL 15 12 9 1 5 NULL NULL NULL NULL 16 13 9 6 2 NULL NULL NULL NULL 17 10 12 4 5 NULL NULL NULL NULL
    Tabelle T7 – Startkonfiguration „Würfel", – die folgende Tabelle exemplarisch die Koordinaten der entsprechenden Höhenpunkte für eine dreidimensionale Höhenkarte zeigt:
    Figure 00890001
    Tabelle T8 – Startkonfiguration „Würfel" – Koordinaten der Höhenpunkte, – die Diamanten der Netzpunkte 8, 9, 10, 11, 12 und 13 jeweils eine Seitenfläche des Würfels repräsentieren, wobei diese Netzpunkte können als Ausgangspunkt für die weitere Verfeinerung des Netzes benutzt werden.
  17. Verfahren nach einem der Ansprüche 1 bis 16, dadurch gekennzeichnet, dass – eine Operation „Hinzufügen" (Verfeinerung) in der folgenden Form definiert und verwendet wird (siehe 20a20d): Funktion Add(V, T):C mit T ∊ (LL, LR, RL, RR) V := Indexwert eines existierenden Netzpunkts C := Indexwert des hinzugefügten Netzpunkts, NULL oder VOID, bestehend aus den Schritten: – Bestimmung des Typen des Diamanten von V: Wenn V == L.LL ist, dann liegt Diamanttyp A vor, ansonsten liegt Typ B vor. Wenn V == R.LR ist, dann liegt Diamanttyp A vor, ansonsten liegt Typ B vor.wobei L der L-Vorgänger von V ist und R der R-Vorgänger von V; – Bestimmen von V* (siehe 19a und 19b): Diamanttyp A: Diamanttyp B: V0* == L.LR V0* == L.RR V1* == L.RR V1* == L.LR V2* == R.LL V2* == R.RL V3* == R.RL V3* == R.LL;
    – Belegen der Referenzen der Netzpunkte des Diamanten von V: Add(V, LL): Add(V, LR): Add(V, RL): Add(V, RR): V.LL = C V.LR = C V.RL = C V.RR = C C.L = V C.R = V C.L = V C.R = V C.G = V.L C.G = V.L C.G = V.R C.G = V.R C.W = V.G C.W = V.W C.W = V.W C.W = V.G
    wobei C der neu hinzugefügte Netzpunkt ist; – ist V* gleich VOID, so müssen zusätzlich folgende Eintragungen vorgenommen werden: Add(V, LL): Add(V, LR): Add(V, RL): Add(V, RR): C.R = VOID C.L = VOID C.R = VOID C.L = VOID C.RL = VOID C.LL = VOID C.RL = VOID C.LL = VOID C.RR = VOID C.LR = VOID C.RR = VOID C.LR = VOID;
    – ist V* ungleich VOID, so müssen zusätzlich folgende Eintragungen vorgenommen werden: Add(V, LL): Add(V, LR): Add(V, RL): Add(V, RR): V*.RR = C V*.RL = C V*.LR = C V*.LL = C C.R = V* C.L = V* C.R = V* C.L = V*.
  18. Verfahren nach einem der Ansprüche 1 bis 17, dadurch gekennzeichnet, dass – eine Operation „Entfernen" (Vereinfachung) definiert und verwendet wird (siehe 21a und 21b).
  19. Verfahren nach einem der Ansprüche 1 bis 18, dadurch gekennzeichnet, dass – eine Operation „Dreieckstreifen" wie folgt definiert und verwendet wird (siehe 23, 24a24b, 25a25l, 26a26h), bestehend aus folgenden Schritten: – Definition von terminalen Dreiecken und Aufteilung des RTIN in terminale Dreiecke (23): E2·x-1-LR = E2·x, mit x ∊ N E2·x-RL = E2·x+1, mit x ∊ N D.LL = E1 ∨ D.RL = E1 F2·x-1-RL = F2·x, mit x ∊ N F2·x-LR = F2·x+1, mit x ∊ N D.LR = F1 ∨ D.RR = F1; – Aneinanderreihung der terminalen Dreiecke über Eingangs- und Ausgangskanten: K0 := (En-1+(nmod2), C) K1 := (Fm-1+(mmod2), B) K2 := (En_(nmod2), C) K3 := (Fm-(mmod2), B) mit E0 = F0 = D E-1 = F-1 = A, Fall Laufrichtung Eingangskante Ausgangskante SS nach rechts K0 K1 SB nach rechts K0 K3 BS nach rechts K2 K1 BB nach rechts K2 K3 SS nach links K1 K0 SB nach links K1 K2 BS nach links K3 K0 BB nach links K3 K2
    Tabelle T9 – Zuordnung der Eingangs- und Ausgangskanten; – Definition des Traversierungszustands: S := {SS, SB, BS, BB} Γ := {LL, LR, RL, RR}, Nicht-terminales Dreieck ABC Linkes Teildreieck DCA Rechtes Teildreieck DAB Reihenfolge s ∊ S γ ∊ Γ s ∊ S γ ∊ Γ s ∊ S γ ∊ Γ L: nach links R: nach rechts SS LL BS LR SB RR L SS RL BS LR SB RR L SB LL BS LR SS RR L SB RL BS LR SS RR L BS LL SS LR SB RR L BS RL SS LR SB RR L BB LL SS LR SS RR L BB RL SS LR SS RR L SS LR SB LL BS RL R SS RR SB LL BS RL R SB LR SS LL BS RL R SB RR SS LL BS RL R BS LR SB LL SS RL R BS RR SB LL SS RL R BB LR SS LL SS RL R BB RR SS LL SS RL R
    Tabelle T10 – Rekursionsvorschrift zur Sequenzbildung der terminalen Dreiecke; – Definition der aktuellen Kante der Traversierung und Formulierung einer Start- und Endbedingung für das Besuchen von terminalen Dreiecken: – die letzten beiden Netzpunkte des von der Dreieckstreifen-Operation erzeugten Dreieckstreifens DS bilden die aktuelle Kante der Traversierung; die aktuelle Kante zeigt immer vom vorletzten Netzpunkt des Dreieckstreifens zum letzten Netzpunkt; – für die Traversierung eines terminalen Dreiecks wird folgende Startbedingung gestellt (bezogen auf 23): Die aktuelle Kante der Traversierung entspricht beim Betreten eines terminalen Dreiecks der verwendeten Eingangskante (K0, K1, K2 oder K3); – weiterhin wird folgende Endbedingung gestellt: Die aktuelle Kante der Traversierung entspricht beim Verlassen eines terminalen Dreiecks der verwendeten Ausgangskante (K0, K1, K2 oder K3); – Definition einer festen Sequenz von Netzpunkten pro Traversierungszustand: Fall n = 0 ∧ n > 0 ∧ n > 0 ∧ n = 0 ∧ n = 0 ∧ m = 0 ∧ m = 0 ∧ m = 0 ∧ m > 0 ∧ m > 0 ∧ En ∊ K0 2 ) En ∊ K2 3) Fm ∊ K1 4) Fm ∊ K35) Für γ ∊ {LL, RL}, d. h. Laufrichtung nach rechts SS [A, C], [En, C], [En – 1, C], [A, C], [A, C], A, D, En...E1, En – 1, En...E1, A, D, A, D, D, D, F1...Fm – 1, F1...Fm, [A, B] [A, B] [A, B] [Fm, B] [Fm – 1, B] SB [A, C], [En, C], [En – 1, C], [A, C], [A, C], A, En...E1, En – 1, En...E1, A, D, A, D, D, A, D, A, F1...Fm, F1...Fm – 1, [D, B] [D, B] [D, B] [Fm – 1, B] [Fm, B] BS [D, C], [En – 1, C ] , [En, C], [D, C], [D, C], D, En – 1, En...E1, En...E1, D, D, A, D, D, A, D, D, F1...Fm – 1, F1...Fm, [A, B] [A, B] [A, B] [Fm, B] [Fm – 1, B] Für γ ∊ {LR, RR}, d. h. Laufrichtung nach links SS [A, B], [A, B], [A, B], [Fm, B], [Fm – 1, B], A, D, A, D, A, D, Fm...F1, Fm – 1, Fm...F1, E1...En – 1, E1...En, D, D, [A, C] [En, C] [En – 1, C] [A, C] [A, C] SB [A, B], [A, B], [A, B], [Fm, B], [Fm – 1, B], A, A, D, A, D, Fm...F1, Fm – 1, Fm...F1, E1...En, E1...En – 1, D, A, D, A, [D, C] [En – 1, C] [En, C] [D, C] [D, C] BS [D, B], [D, B], [D, B], [Fm – 1, B], [Fm, B], D, D, A, D, D, A, D, Fm – 1, Fm...F1, Fm...F1, E1...En – 1, E1...En, D D, [A, C] [En, C] [En – 1, C] [A, C] [A, C]
    Tabelle T11 – Bildung des Dreieckstreifens für ein terminales Dreieck; 1)Linkes und rechtes Teildreieck ist ungeteilt. 2) Linkes Teildreieck ist geteilt, rechtes Teildreieck ist ungeteilt. Der Netzpunkt En liegt auf Kante K0. 3) Linkes Teildreieck ist geteilt, rechtes Teildreieck ist ungeteilt. Der Netzpunkt En liegt auf Kante K2. 4) Linkes Teildreieck ist ungeteilt, rechtes Teildreieck ist geteilt. Der Netzpunkt Fm liegt auf Kante K1. 5) Linkes Teildreieck ist ungeteilt, rechtes Teildreieck ist geteilt. Der Netzpunkt Fm liegt auf Kante K3. – Zuordnung der festen Sequenzen zu Sequenzfunktionen und Referenzen der im xDAG enthaltenen Netzpunkte: γ ∊ Γ A B C D LL V.L V.W V.G V LR V.L V.G V.W V RL V.R V.G V.W V RR V.R V.W V.G V
    Tabelle T12 – Zuordnung der Netzpunkte eines terminalen Dreiecks zu xDAG Netzpunktsequenz E1...En E1...En, En-1 En...E1 En-1, En...E1 Sequenzfunktion C1_LR (E1) C1_LR_INV (E1) C0_LR (E1) CO_LR_INV (E1) Netzpunktsequenz F1...Fm F1...Fm, Fm-1 Fm...F1 Fm_1, Fm...F1 Sequenzfunktion C1_RL (F1) C1_RL_INV (F1) CO_RL (F1) CO_RL_INV (F1)
    Tabelle T13 – Bildung der Netzpunktsequenzen unter Benutzung der Sequenzfunktionen
  20. Verfahren nach einem der Ansprüche 1 bis 19, dadurch gekennzeichnet, dass – es in Form eines integrierten Schaltkreises auf einer Grafikkarte untergebracht und dort ausgeführt wird, – die Referenzen der Netzpunkte und deren Indexwerte im Grafikspeicher der Grafikkarte oder einem zusätzlich auf der Grafikkarte untergebrachten Speicher abgelegt werden, und – die Erzeugung des Dreieckstreifens für die Darstellung der Landschaft ohne vorherige Erzeugung eines Grafikprimitivs durch die Anwendung direkt auf der Grafikkarte durchgeführt und die daraus resultierende Sequenz von Indexwerten unmittelbar für die grafische Darstellung verwendet wird.
  21. Verfahren nach einem der Ansprüche 1 bis 19, dadurch gekennzeichnet, dass – es auf einem konventionellen Rechner als Software implementiert wird.
  22. Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, die in Form einer Höhenkarte zur Verfügung gestellt wird, enthaltend einen einen Hauptspeicher aufweisenden Rechner, eine einen Grafikspeicher aufweisende Grafikkarte und ein zur Ausgabe von dreidimensionalen Darstellungen fähiges Ausgabegerät, insbesondere einen grafischen Bildschirm, dadurch gekennzeichnet, dass – es zur Durchführung des Verfahrens nach einem oder mehreren der Ansprüche 1 bis 19 eingerichtet ist.
  23. Computersystem nach Anspruch 22, dadurch gekennzeichnet, dass – das Verfahren als Software in dem Rechner implementiert ist.
  24. Computersystem nach Anspruch 22 oder 23, dadurch gekennzeichnet, dass – das Verfahren in Form eines integrierten Schaltkreises auf der Grafikkarte untergebracht und dort ausführbar ist, – die Referenzen der Netzpunkte und deren Indexwerte im Grafikspeicher der Grafikkarte oder einem zusätzlichen, auf der Grafikkarte untergebrachten Speicher abgelegt sind, und – die Erzeugung eines Dreieckstreifens für die Darstellung der Landschaft ohne vorherige Erzeugung eines Grafikprimitivs durch die Anwendung direkt auf der Grafikkarte durchführbar und die daraus resultierende Sequenz von Indexwerten unmittelbar für die grafische Darstellung verwendbar ist.
DE200710037033 2007-08-06 2007-08-06 Verfahren und Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, insbesondere auf einem grafischen Bildschirm Withdrawn DE102007037033A1 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE200710037033 DE102007037033A1 (de) 2007-08-06 2007-08-06 Verfahren und Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, insbesondere auf einem grafischen Bildschirm
PCT/DE2008/001295 WO2009018820A2 (de) 2007-08-06 2008-08-06 Verfahren und computersystem zur dreidimensionalen darstellung einer landschaft in echtzeit, insbesondere auf einem grafischen bildschirm

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE200710037033 DE102007037033A1 (de) 2007-08-06 2007-08-06 Verfahren und Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, insbesondere auf einem grafischen Bildschirm

Publications (1)

Publication Number Publication Date
DE102007037033A1 true DE102007037033A1 (de) 2009-02-12

Family

ID=40226885

Family Applications (1)

Application Number Title Priority Date Filing Date
DE200710037033 Withdrawn DE102007037033A1 (de) 2007-08-06 2007-08-06 Verfahren und Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, insbesondere auf einem grafischen Bildschirm

Country Status (2)

Country Link
DE (1) DE102007037033A1 (de)
WO (1) WO2009018820A2 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102014114642B3 (de) * 2014-10-09 2016-03-03 Volker Schweisfurth Dreidimensionales Gebilde zur Visualisierung von Daten

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2589933B1 (de) * 2011-11-03 2019-10-16 Harman Becker Automotive Systems GmbH Navigationsvorrichtung, Verfahren zur Vorhersage der Sichtbarkeit einer dreieckigen Fläche auf einer elektronischen Karte
CN111145328B (zh) * 2019-12-04 2022-08-12 稿定(厦门)科技有限公司 三维文字表面纹理坐标计算方法、介质、设备及装置
CN111681157B (zh) * 2020-06-09 2024-04-09 西安万像电子科技有限公司 图像渲染方法及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6208997B1 (en) 1997-10-17 2001-03-27 The Regents Of The University Of California Rapid production of optimal-quality reduced-resolution representations of very large databases
US6426747B1 (en) * 1999-06-04 2002-07-30 Microsoft Corporation Optimization of mesh locality for transparent vertex caching

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6208997B1 (en) 1997-10-17 2001-03-27 The Regents Of The University Of California Rapid production of optimal-quality reduced-resolution representations of very large databases
US6426747B1 (en) * 1999-06-04 2002-07-30 Microsoft Corporation Optimization of mesh locality for transparent vertex caching

Non-Patent Citations (42)

* Cited by examiner, † Cited by third party
Title
A. Persson Large planetary data visualization using ROAM 2.0 Linköpings University, Department of Science and Technology, 2005
A. Pomeranz. ROAM Using Surface Triangle Clusters (RUSTiC) Master's Thesis, University of California, Davis. Jun. 2000
B. András. Real-Time Visualization of Detailed Terrain Diplomarbeit, Universität Budapest
B. Ben-Moshe, M. J. Katz, J. S. B. Mitchell, Y. Nir. Visibility Preserving Terrain Simplification SCG 2002: Proceedings of the 18th annual symposium on Computational geometry, 303-311. 2002
B. D. Larsen, N. J. Christensen Real-time Terrain Rendering using Smooth Hardware Optimized Level of Detail Journal of WSCG, 11(1), 3-7. 2003
D. Cline, P. K. Egbert. Terrain decimation through quadtree morphing IEEE Transactions on Visualization and Computer Graphics 7(1), 62-69. Jan.-Mar. 2001
D. Hill. An Efficient, Hardware-Accelerated, Level-of-Detail Rendering Technique for Large Terrains Master's Thesis, University of Toronto. 2002
DUCHAINEAU, M. et al.: ROAMing Terrain-Realtime Op timally Adapting Meshes. IEEE Visualization, 1997, S. 81-88
DUCHAINEAU, M. et al.: ROAMing Terrain-Realtime Optimally Adapting Meshes. IEEE Visualization, 1997, S. 81-88; *
F. Evans, S. S. Skiena, A. Varshney. Optimizing Triangle Strips For Fast Rendering IEEE Visualization 96, 319-326. Oct. 1996
F. Losasso, H. Hoppe. Geometry clipmaps: Terrain Rendering Using Nested Regular Grilds ACM SIGGRAPH 2004, 769-776. 2004
H. Qu, F. Qiu, N. Zhang, A. Kaufman, M. Wan Ray Tracing Height Fields Computer Graphics International, 2003. Proceedings Volume, Issue, 9-11 July 2003 Page(s): 202-207
J. Bevins libnoise: Complex planetary surface example World Wide Web: http://libnoise.sourceforge.net/examples/complexplanet/index.html, 2005
J. Blow. Terrain Rendering at High Levels of Detail Proceedings of Game Developer Conference 2000. 2000
J. El-Sana, F. Evans, A. Kalaiah, A. Varshney, S. Skiena, E. Azanli. Efficiently Computing and Updating Triangle Strips for Real-Time Rendering Computer-Aided Design 32(13), 753-772. Nov 2000
J. Levenberg. Fast View-Dependent Level-of-Detail rendering using cached geometry Forthcoming. Mar. 2002
J. Olsen Realtime Procedural Terrain Generation University of Southern Denmark, Department of Mathematics And Computer Science, 2004
J. P. Suárez, A. Plaza de la Hoz. Refinement and hierarchical coarsening schemes for triangluated surfaces Proceedings of 11th Internation Conference in Central Europe an Computer Graphics (WSCG 2003). 2003
J. P. Suárez, G. F. Carey, A. Plaza, M. A. Padrón. Graph Based Data Structures For Skeleton Based Refinement Algorithms Comm. Num. Meth. Eng. 17, 903-910. 2001
J. Schneider, R. Westermann. GPU-Friendly High-Quality Terrain Rendering Journal of WSCG 14(1-3), 49-56. 2006
K. Baumann, J. Döllner, K. Hinrichs, O. Kersting. A Hybrid, Hierarchical Data Structure for Real-Time Terrain Visualization IEEE Computer Graphics International 99, 85-92. 1999
M. A. Duchaineau, M. Wolinsky, D. E. Sigeti, M. C. Miller, C. Aldrich, M. B. Mineev-Weinstein. ROAMing Terrain: Real-time Optimally Adapting Meshes IEEE Visualization 97, 81-88. Nov. 1997
M. de Berg, K. Dobrindt. On Levels of Detail in Terrains 11th Symposium on Computational Geometry, <?page 36?>C26-C27. 1995
M. Duchaineau Roam algorithm version 2.0 - work in progress World Wide Web. http://www.cognigraph.com/ROAM homepage/ROAM2/
M. Garland, P. Heckbert. Fast polygonal approximation of terrains and height fields Tech. Rep. CMU-CS-95-181, Carnegie Mellon University. Sept. 1995
M. Segal, K. Akeley The OpenGL Graphics System, A Specification (Version 1.5) World Wide Web http://www.opengl.org/documentation/specs/version1.5/glspec15.pdf, 2003
M. Wand Point-Based Multi-Resolution Rendering Dissertation, Universität Tübingen, 17 Fakultät für Informations- und Kognitionswissenschaften, 2004
Microsoft DirectX SDK April 2007 World Wide Web http://msdn.microsoft.com/directx, 2007
P. Cignoni, C. Montani, R. Scopigno. A Comparison of Mesh Simplification Algorithms Computers & Graphics 22(1), 37-54, 1998
P. Cignoni, F. Ganovelli, E. Gobetti, F. Marion, F. Ponchio, R. Scopigno. Planet-sized Batched Dynamic Adaptive Meshes (P-BDAM) IEEE Visualization 2003, 147-154. 2003
P. Cignoni, F. Ganovelli, E. Gobetti, F. Marton, F. Ponchio, R. Scopigno. BDAM - Batched Dynamic Adaptive Meshes for High Performance Terrain Visualization Computer Graphics Forum 22(3)
P. Lindstrom, D. Koller, W. Ribarsky, L.F. Hodges, N. Faust, G. Turner. Real-Time, Continuous Level of Detail Rendering of Height Fields SIGGRAPH 96, 109-118. Aug. 1996
P. Lindstrom, V. Pascucci. Terrain Simplification Simplified: A General Framework for View-Dependent Out-of-Core Visualization IEEE Transactions on Visualization and Computer Graphics 8(3), 239-252. 2002
P. Lindstrom, V. Pascucci. Visualization of Large Terrains Made Easy IEEE Visualization 2001, 363-370. Oct. 2001
R. B. Pajarola. Large Scale Terrain Visualization Using the Restricted Quadtree Triangulation IEEE Visualization 98, 19-26. Oct. 1998
R. Pajarola, M. Antonijuan, R. Lario QuadTIN: Quadtree based Triangulated Irregular Networks IEEE Visualization 2002, 395-402. 2002
R. Pajarola. Overview of Quadtree-based Terrain Trianglulation and Visualization Tech. Rep. UCI-ICS TR 02-01, Department of Information, Computer Science University of California, Irvine. Jan. 2002
S. Röttger, W. Heidrich, P. Slussallek, H.-P. Seidel. Real-Time Generation of Continuous Levels of Detail for Height Fields Proceedings of the 6th International Conference in Central Europe an Computer Graphics and Visualization, 315-322. Feb. 1998
T. Lauritsen, S. L. Nielsen Rendering Very Large, Very Detailed Terrains Student project at the Danish Technical University, Informatics and Mathematical Modelling, 2005
T. Polack Focus On 3D Terrain Programming Premier Press, ISBN 1-59200-028-2, 2003
T. Ulrich. Rendering Massive Terrains Using Chunked Level of Detail ACM SIGGRAPH Course "Super-size it! Scaling up to Massive Virtual Worlds", 2000
W. Evans, D. Kirkpatrick, G. Townsend. Right-Triangulated Irregular Networks Algorithmica 30(2): 264-286. Mar. 2001

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102014114642B3 (de) * 2014-10-09 2016-03-03 Volker Schweisfurth Dreidimensionales Gebilde zur Visualisierung von Daten

Also Published As

Publication number Publication date
WO2009018820A2 (de) 2009-02-12
WO2009018820A3 (de) 2009-07-23

Similar Documents

Publication Publication Date Title
DE112007002991B4 (de) Computergraphikschattenvolumen unter Verwendung von hierarchischem Okklusions-Culling
DE102018114286A1 (de) Durchführen einer Traversierungs-Stack-Komprimierung
DE102010046891B4 (de) Hierarchische Netzquantisierung für speichereffizientes Raytracing
DE102013017640B4 (de) Verteilte gekachelte Zwischenspeicherung
DE102013017639B4 (de) Zwischenspeicherung von adaptiv dimensionierten Cache-Kacheln in einem vereinheitlichten L2-Cache-Speicher mit Oberflächenkomprimierung
DE102015113240A1 (de) System, verfahren und computerprogrammprodukt für schattierung unter verwendung eines dynamischen objektraumgitters
DE69924699T2 (de) Verfahren zur Schaffung von als Oberflächenelemente dargestellten grafischen Objekten
DE102015113797A1 (de) Relative Kodierung für eine blockbasierte Begrenzungsvolumenhierarchie
DE102013114373A1 (de) Konsistente Vertex-Einrastung für Rendering mit variabler Auflösung
DE112019005672T5 (de) Erzeugung stellungsvarianter 3d-gesichtsattribute
EP0780800A2 (de) Verfahren und Vorrichtung zur bildlichen Darstellung raumbezogener Daten
DE102013021046A1 (de) Erzeugung fehlerbefreiter Voxel-Daten
DE102009041431A1 (de) Fahrsimulationsvorrichtung, Weitwinkelkamera-Videosimulationsvorrichtung und Bilddeformierungs-/-zusammensetzungsvorrichtung
DE112005002076T5 (de) Unterteilung von Geometriebildern in Grafikhardware
DE102013018445A1 (de) Festlegung eines nachgeordneten Bilderzeugungszustands in einer vorgeordneten Schattierungseinheit
DE112022003721T5 (de) Mikro-netze, eine strukturierte geometrie für computergrafik
DE102013020968A1 (de) Technik zum Zugreifen auf einen inhaltsadressierbaren Speicher
DE102013222685A1 (de) System, Verfahren und Computer-Programm-Produkt zum Abtasten einer hierarchischen Tiefe-Karte
DE19817584B4 (de) Verfahren und System zur Objektsuche
DE69924230T2 (de) Verfahren zur Modellierung von durch Oberflächenelemente dargestellten grafischen Objekten
DE102020108526A1 (de) Adaptive pixelabtastreihenfolge für zeitlich dichtes rendern
DE102013017981A1 (de) Optimierung einer Dreieck-Topologie für Pfad-Bilderzeugung
EP0829822A2 (de) Verfahren zur Anzeige von geometrischen Objektoberflächen
DE102022119422A1 (de) Verfahren zum Erzeugen einer hierarchischen Datenstruktur, hierarchische Datenstruktur sowie Verfahren zum Streamen von dreidimensionalen Objekten
DE102007037033A1 (de) Verfahren und Computersystem zur dreidimensionalen Darstellung einer Landschaft in Echtzeit, insbesondere auf einem grafischen Bildschirm

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20110301