<chapter>
    <title>Repräsentation</title>
    <para>
        Die Objektrepräsentation im dreidimensionalen Raum ist ein im Feld der Computergrafik ein 
        viel-diskutiertes Thema für welches sich keine allgemein-gültige Lösung herausgestellt hat. 
        Es werden verschiedene Ansätze verfolgt, von denen jeder eigene Vor- und Nachteile hat.
        Einige dieser Ansätze sollen hier kurz diskutiert werden.
    </para>
    <para>
        Die geometrischen Daten der in 3D-Formaten abzuspeichernden Objekte müssen in
        geeigneten Datenstrukturen abgelegt werden. Die Wahl einer geeigneten Objektrepräsentation
        ist keine einfache Aufgabe. Die Darstellungsform wird sowohl durch die Rendering-
        Technik, d.h. die Art der Erzeugung eines Bildes, als auch durch die Anwendung
        bestimmt. Eine Vielzahl von Aspekten können bzw. müssen berücksichtigt werden. Zu
        nennen sind z.B. geringer Speicherbedarf, schnelle Darstellbarkeit, die Durchführbarkeit
        linearer Transformationen und Kombinationsoperatoren, die Möglichkeit der Interaktion
        und die Möglichkeit der automatischen Generierung der Datenstruktur anhand von digitalisierten
        realen Objekten (z.B. mittels 3D-Scanner oder CT).
    </para>
    <para>
        Im folgenden sollen einige verbreitete Repräsentationsschemata mit ihren jeweiligen Vor- und Nachteilen
        vorgestellt werden - die Punkt-Wolke, das Draht-Modell sowie Flächen- und Volumen-Modelle.
    </para>
    <section>
        <title>Punkt-Wolke</title>
        <para>
            Die Punkt-Wolke (engl. Scatter Plot) ist die einfachste - allerdings auch die ungenaueste - 
            Möglichkeit Geometrie im dreidimensionalen Raum zu repräsentieren. Die Darstellung des 
            Objektes erfolgt durch eine Menge von Punkten - Vertices genannt. Es bestehen keine Relationen
            zwischen Punkten und somit kann diese Form der Darstellung keinerlei Informationen über Kanten,
            Volumen oder Oberflächen des Objektes tragen, jedoch ist es möglich solche Daten heuristisch 
            zu erzeugen, zum Beispiel indem man Polygone über benachbarte Vertices aufspannt. Dieses Vorgehen
            führt jedoch nicht oft zu befriedigenden Ergebnissen.
        </para>
        <para>
            Die Objekt-Struktur der Punkt-Wolke ist sehr einfach: einzige atomare Strukturen sind die Punkte im 
            Raum, Objekte bestehen aus Mengen von Punkten. 
            Bei Punkt-Wolken ist der Interpretationsspielraum des Betrachters in der Regel sehr
            hoch. Um gekrümmte Kanten und Oberflächen zu repräsentieren, benötigt man sehr
            viele Punkte, was zu einem entsprechend hohen Speicherplatz-Verbrauch führt.
            Die Vorteile der Punkt-Wolke liegen  bei angemessener Verwendung  im geringen
            Speicherplatz und schnellen und einfachen Transformationen.
        </para>
        <para>
            Da Punkt-Wolken einfach mittels 3D-Scanner erzeugt werden können kommen sie oft als Zwischenergebnis
            nach zum Einsatz.
            
            <mediaobject>
                <imageobject>
                    <imagedata fileref="./images/punktwolke.eps" format="eps">
                </imageobject>
                <caption>
                    <para>Abb. 2 - Ergebnis des 3D-Scans eines Pokals als Punkt-Wolke</para>
                </caption>
            </mediaobject>
        </para>
    </section>
    <section>
        <title>Draht-Modell</title>
        <para>
            Beim Draht-Modell (engl. Wireframe Modell) beschränkt sich die Repräsentation auf Kanten zwischen Punkten (Vertices). Oft wird
            davon ausgegangen dass nur gerade Kanten möglich sind, man kann aber durchaus auch Kurven, Bögen etc.
            zulassen, weil dies aber die Darstellung sehr kompliziert werden lässt wird diese Möglichkeit im
            Allgemeinen nicht zugelassen.
        </para>
        <para>
            Prinzipiell kann man als Struktur in Draht-Modellen jegliche Art von Polygonen verwenden, aber da sich jegliches 
            Polygon aus Dreiecken zusammensetzen lässt wird im Allgemeinen dieses als atomares Primitiv verwandt. Daraus
            ergeben sich mehrere Möglichkeiten die Kanten-Informationen in Draht-Modellen zu speichern.
        </para>
        <para>
            Die intuitivste Methode ist die einzelnen Vertices einfach in Dreiergruppen in einer Liste zu speichern. Dabei ergibt
            sich allerdings das Problem dass Vertices - da sie im Allgemeinen nicht nur Eckpunkte eines Dreiecks sind - mehrfach abgespeichert
            werden müssen. Das lässt sich lösen indem man eine Liste von Vertices (Vertex Array) und eine Liste von Index-Tupeln welche dann
            die Kanten definieren, aber auch hier besteht Redundanz, und zwar werden Indices mehrfach gespeichert. Deswegen
            werden Draht-Modelle oft als Dreiecks-Netze (Triangle Mesh, Triangle List) gespeichert, 
            was bedeutet dass man eine Index-Liste in der Art speichert so dass 
            drei aufeinander folgende Einträge in dieser ein Dreieck ergeben. Redundanz noch mehr verringern lässt sich durch das Speichern
            als Dreiecksstreifen (Triangle Strip). Hierbei werden die Indices in einer geeigneten
            Reihenfolge gespeichert so dass drei beliebige Einträge ein Dreieck ergeben. Eine letzte Methode mit noch weniger Einträgen
            in der Index-Liste auszukommen ist das Speichern als Dreiecks-Fächer, wobei ausgehend von einem Startpunkt nur noch zwei
            Einträge nötig sind ein Dreieck aufzuspannen (vgl. Abb. 3).
            <mediaobject>
                <imageobject>
                    <imagedata fileref="./images/triangles.eps" format="eps">
                </imageobject>
                <caption>
                    <para>Abb. 3 - Verschiedene Methoden Dreiecks-Modelle zu speichern</para>
                </caption>
            </mediaobject>
        </para>
    </section>
    <section>
        <title>Flächen-Modell</title>
        <para>
            Um dreidimensionale Objekte realistischer und in richtiger Sichtbarkeit darstellen zu
            können, braucht man zumindest die Information, zwischen welchen Kanten sich Flächen
            befinden. Meistens wird dabei so vorgegangen, dass jedes Objekt direkt aus den
            das Objekt begrenzenden Flächen konstruiert wird; man spricht daher von einem Flächen-Modell.
        </para>
        <para>
            Zur Modellierung der Flächen können verschiedene Grundelemente wie Polygone,
            Kreis- oder Ellipsen-Flächen oder mathematisch definierte Flächen verwendet werden.
            Flächen-Modelle werden häufig dort eingesetzt, wo komplexe, mehrfach gekrümmte
            Oberflächen modelliert und bearbeitet werden sollen, wie im Flugzeug- und Automobilbau.
            Da beim Flächen-Modell die Objekte nur aus Oberflächen bestehen und daher kein Inneres
            haben, treten verschiedene Probleme auf, z. B. bei der Durchführung von Schnitten.
            Teilweise transparente Objekte ohne definierte Oberflächen wie Wolken, Explosionen
            oder Feuer sind damit nur über Tricks simulierbar. In diesem Bereich kann ein anderes
            Prinzip, die Volumen-Grafik, seine Stärken ausspielen (vgl. Kapitel 2.4).
            Im Bereich der Flächen-Modelle sind besonders zwei Prinzipien weit verbreitet, Polygon-Netze
            und bikubische Parameter-Oberflächen.
        </para>
        <section>
            <title>Polygon-Netze</title>
            <para>
                Polygon-Netze sind bei weitem das weit-verbreitetste Flächen-Modell. Dabei ist der Schritt vom
                Drahtgitter-Modell zum Polygon-Netz ein sehr kleiner, da er eigentlich nur ein Frage der
                Darstellung, nicht der Speicherung ist. Deshalb gelten auch hier die selben Voraussetzungen
                wie bei Drahtgitter-Modellen und man kann die selben Techniken anwenden.
            </para>
            <para>
                Diese Methode Flächen-Modelle zu speichern ist vor allem deshalb so beliebt weil hierbei Tests
                auf zum Beispiel Konsistenz und Integrität sehr einfach zu implementieren sind. Auch hat sich
                gezeigt dass Dreiecke als atomare Einheiten für moderne Grafik-Hardware sehr günstig darzustellen sind.
                Allerdings werden zum Darstellen solcher Flächen-Modelle Verfahren benötigt die nicht sichtbare
                Linien und Oberflächen vor dem eigentlichen Zeichnen heraus filtern. Wie beim Draht-Modell ist auch beim Polygon-Netz die
                Darstellung gekrümmter Oberflächen problematisch. Sie müssen durch planare Polygon-Flächen
                approximiert werden, was bei guter Näherung zu einer unvertretbar hohen
                Zahl von Polygonen führen kann. Trotzdem überwiegen die Einfachheit der angesprochenen Tests
                sowie die effektive Algorithmen und Hardware zur Darstellung.
            </para>
        </section>
        <section>
            <title>Parameter-Oberflächen</title>
            <para>
                Im Unterschied zur Darstellung durch Polygon-Netze erfolgt die Abbildung eines dreidimensionalen
                Objekts bei den bikubischen Parameter-Oberflächen (auch: Freiformfläche) durch gekrümmte
                Oberflächen, die als Patches bezeichnet werden.
            </para>
            <para>
                Jeder Patch wird durch mathematische Formeln definiert, welche die Position im dreidimensionalen
                Raum sowie die Form des Patches bestimmen. Die Formeln ermöglichen
                es, jeden Punkt auf der Oberfläche eines Patches zu erzeugen. Form oder Krümmung
                eines Patches können durch eine Bearbeitung der mathematischen Beschreibung modifiziert
                werden, woraus sich weitreichende Möglichkeiten zur Interaktion ergeben.
            </para>
            <para>
                Dennoch gibt es auch bei den Freiformflächen bedeutende Probleme: 
                Es ist sehr aufwendig, die Patches direkt zu rendern oder zu visualisieren. Wenn die
                Form eines einzelnen Patches in einem Netz von Patches verändert wird, entstehen
                Probleme, die glatten Übergänge zwischen dem Patch und seinen Nachbarn zu bewahren.
                Bikubische parametrische Patches können entweder eine exakte oder eine angenäherte
                Darstellung sein. Sie können nur eine exakte Darstellung von sich selbst sein, was bedeutet,
                dass jedes Objekt  z.B. ein Karosserie-Blech  nur dann genau dargestellt werden
                kann, wenn seine Form exakt der Form des Patches entspricht.
            </para>
            <para>
                Um solche Parameter-Oberflächen nun zu rendern muss es in ein Polygon-Netz umgewandelt werden. Dies
                geschieht durch eine Technik die Subdivisioning genannt wird, wobei die Flächen iterativ durch
                Dreiecke angenähert werden. Es ist leicht ersichtlich dass dies je nach angestrebter Genauigkeit
                sehr schnell zu sehr großen Datenmengen führen kann.
            </para>
            <para>
                Die Erstellung und Reproduktion von Kurven und Oberflächen findet vielseitig Verwendung, 
                insbesondere im Karosseriebau. Ziel hierbei ist mit möglichst wenig Informationen über die
                Kurve (Fläche) eine hohe Flexibilität und vor allem vollständige Rekonstruierbarkeit zu erreichen.
                Man kann solche Kurven mittels parametrischer Funktionen auf verschiedene Weise erzeugen, z.B
                über Polynominterpolationen.
                Eine parametrisierte Kurve im Raum hat die folgende Form:
            </para>
            <para>
                f: [0,1] -> ( f(u), g(u), h(u) )
            </para>
            <para>
                Wobei f, g und h reelle Funktionen sind. Somit bildet f(u) die reelle Zahl u aus dem Intervall
                [0, 1] auf einen Punkt im Raum ab.
            </para>
            <para>
                Ein Spline ist eine beliebig glatte Kurve welche über ihre Kontrollpunkte (Control Vertices)
                definiert wird. Splines haben einen Anfang und ein Ende, und somit eine Richtung welche
                auch umgekehrt werden kann. Ein Basis-Spline (B-Spline) ist eine aus mehreren Segmenten
                zusammengesetzte Spline. Die Bezierkurve kann als Spezialfall der B-Splines angesehen werden.
                Somit sind B-Splines eine einfache Möglichkeit eine durch drei oder mehr Punkte interpolierte
                Kurve zu definieren. Der Name Basis-Spline rührt daher dass diese Art der Kurve durch sogenannte
                Basis-Funktionen erzeugt wird. Eine weitere Besonderheit der B-Splines besteht darin dass sich
                Veränderungen an den Kontrollpunkten nur auf den lokalen Abschnitt der Kurve auswirken.
            </para>
            <para>
                Bezierkurven wurden speziell für den Computergestützten Entwurf von Karosserien entwickelt.
                Sie sind ein Basis-Spline welches aus nur einem Segment besteht und von zwei Kontrollpunkten
                gesteuert wird. Zu diesen Kontrollpunkten wird zusätzlich noch ein Vektor assoziiert wessen
                Länge und Richtung den Einfluss des Control Vertex auf die Kurve verändert.
            </para>
            <para>
                NURBS steht für Non-Uniform Rational Basis-Spline. Es ist eine mathematische Definition von Kurven, 
                Flächen und Volumen-Körpern und hat sich als Industriestandard für das Entwerfen und Modellieren
                etabliert. Non-Uniform bedeutet dass der Einflussbereich eines Kontrollpunktes variieren kann was 
                besonders beim Modellieren unregelmäßiger Flächen hilfreich ist. Rational bedeutet dass die
                definierende Gleichung nicht durch ein einzelnes Summenpolynom sondern vielmehr durch das Verhältnis
                zweier Polynome definiert ist.
            </para>
            <para>
                Da der Übergang von NURBS-Kurven zu -Flächen trivial ist und im allgemeinen die gleichen Voraussetzungen
                für beides gelten wird im weiteren nur noch von Kurven die Rede sein. 
                Es existieren zwei Arten von NURBS-Kurven:
                <itemizedlist>
                    <listitem><para>
                        Punkt-Kurven zeichnen sich dadurch aus dass ihre Kontrollpunkte derart 
                        eingeschränkt sind dass diese sich auf der Kurve befinden und 
                    </para></listitem>
                    <listitem><para>
                        CV-Kurven welche über Steuer-Scheitelpunkte definiert werden die nicht notwendigerweise
                        auf der Kurve sondern auf einem Steuer-Gitter liegen.
                    </para></listitem>
                </itemizedlist>
            </para>
            <para>
                NURBS-Kurven werden im Wesentlichen von drei Dingen beeinflusst:
                <itemizedlist>
                    <listitem><para>
                        Einer Liste von Kontrollpunkten welchen jeweils eine Wichtung zugeordnet wird
                        welche das Maß des Einflusses des Kontrollpunktes auf die Kurve angibt - ist diese
                        Wichtung für alle Punkte gleich ergibt sich eine rationale Kurve.
                        Kontrollpunkte welche darauf beschränkt sind auf der Kurve zu liegen werden 
                        Bearbeitungspunkte genannt und haben trivialerweise keine Wichtung.
                        Kontrollpunkte sind Koeffizienten der NURBS-Basis-Funktionen und ihre
                        Veränderungen wirken sich nicht über die benachbarten Control Vertices hinaus aus.
                        Weiterhin ist die Auswirkung der Kontrollpunkte auf die Kurve kumulativ, sprich mehrere
                        übereinander-liegende Kontrollpunkte verschärfen die Krümmung der Kurve.
                    </para></listitem>
                    <listitem><para>
                        Der Grad eine NURBS-Kurve wird als positive Ganzzahl angegeben welche meist aus
                        [1, 5] stammt. Die Ordnung einer Kurve wird als Grad+1 definiert.
                        Der Grad einer Kurve ist der höchste Exponent in der zum Darstellen der Kurve 
                        verwendeten Gleichung. Eine lineare Gleichung ist eine Gleichung ersten Grades, 
                        eine quadratische Gleichung ist eine Gleichung zweiten Grades. 
                        NURBS-Kurven werden im Allgemeinen durch kubische Gleichungen repräsentiert und sind 
                        somit dritten Grades. Höhere Grade sind möglich, aber normalerweise nicht nötig.
                    </para></listitem>
                    <listitem><para>
                        Da sie mathematisch generiert werden verfügen NURBS-Objekte zusätzlich zum 
                        dreidimensionalen geometrischen Raum in dem sie angezeigt werden über einen Parameter-Raum. 
                        Insbesondere gibt eine Gruppe von Werten welche als Knoten bezeichnet werden den Einflussbereich
                        eines jeden Steuer-Scheitelpunktes auf der Kurve oder Fläche an.
                        Knoten sind im dreidimensionalen Raum unsichtbar, und lassen sich nicht direkt manipulieren,
                        gelegentlich jedoch beeinflusst ihr Verhalten die Darstellungsweise des NURBS-Objektes.
                        Der Parameter-Raum ist eindimensional für Kurven, die über eine einzige topologische 
                        Dimension (u) verfügen und zweidimensional für Flächen deren Dimensionen als u und v 
                        bezeichnet werden.
                    </para></listitem>
                </itemizedlist>
            </para>
            <para>
                NURBS-Flächen haben im Wesentlichen die gleichen Eigenschaften wie NURBS-Kurven. Komplexe
                Flächen werden meist durch mehrere rechteckige Flächen-Segmente (Patches) modelliert, 
                wobei aber an den Übergängen zwischen einzelnen Patches Kontinuitätsprobleme auftreten.
            </para>
            <para>
                Siehe auch [4] und [7].
            </para>
            <para>
                Um diese Kontinuitätsprobleme zu lösen wurden Gregory Patches entwickelt. Sie bestehen
                im Gegensatz zu den gängigen Patches nicht aus vier Kurven welche flach auf der zu modellierenden
                Fläche aufliegen (je zwei in u und in v Richtung), sondern aus fünf oder mehr Kurven welche 
                außerhalb der Fläche liegen wodurch sich fliessendere Übergänge zwischen einzelnen
                Patches ergeben. Vergleiche hierzu Abbildungen 5 und 6.
                <mediaobject>
                    <imageobject>
                        <imagedata fileref="./images/coonspatch.eps" format="eps">
                    </imageobject>
                    <caption>
                        <para>Abb. 5 - Coons-Patch bestehend aus zwei Kurven-paaren</para>
                    </caption>
                </mediaobject>
                <mediaobject>
                    <imageobject>
                        <imagedata fileref="./images/gregpatch.eps" format="eps">
                    </imageobject>
                    <caption>
                        <para>Abb. 6 - Gregory-Patch aus 6 Kurven welche alle nicht auf der Fläche aufliegen</para>
                    </caption>
                </mediaobject>
            </para>
            <para>
                Eine leicht verständliche Zusammenfassung findet sich unter [8] 
            </para>
        </section>
    </section>
    <section>
        <title>Volumen-Modell</title>
        <para>
            Das Volumen-Modell geht von der Verwendung voller Körper aus und ist somit die natürlichste
            Methode der Modell-Darstellung. Das Volumen der Objekte wird direkt in der
            Datenstruktur repräsentiert, so dass es für im Volumen-Modell erstellte Körper kein
            Problem ist, die richtige Sichtbarkeit zu ermitteln.
        </para>
        <para>
            Mit dem Volumen-Modell können auch 3D-Objekte beschrieben werden, die keine explizite
            Oberfläche aufweisen. Dies können zum Beispiel Dichte-Felder, aber auch Wolken oder Feuer sein.
            Bei der Modellierung wird jeder Gegenstand entweder aus einfachen Elementar-Objekten
            wie Würfel, Kugel, Oktaeder, Pyramide, Kegel usw. aber auch aus komplexeren Elementar-Objekten
            wie Spur-Körper, Freiformkörper, Fraktale usw. zusammengesetzt.
            Beim Volumen-Modell handelt es sich um eine eindeutige Darstellungsform, bei der - im
            Gegensatz zu Draht- und Flächen-Modell - die Objekte immer konsistent sind. Da die
            Objekte immer volle Körper sind, treten auch beim Schneiden keine Probleme auf.
        </para>
        <para>
            Der Ansatz der Volumen-Grafik hat eine große Bedeutung in der Medizin und in nahezu
            allen Ingenieurs-technischen Disziplinen wie Maschinen- und Fahrzeugbau, Strömungstechnik,
            aber auch Bergbau oder Chemie. Beliebte Volumen-Modelle sind das Voxel- (von: Volume Element) Modell,
            Oktalbäume, Szenen-Graphen und Constructive Solid Geometry.
        </para>
    </section>
</chapter>
