Dieses Kapitel klärt lediglich das Grundlegendste an Basiswissen ab bezüglich der Bestandteile der dreidimensionalen Darstellung. Die spezielle Theorie zum Definieren der Vertices, der Funktionsweise der Beleuchtung oder der Art und Weise, wie Texturiert wird, wird in den jeweiligen Kapiteln erläutert, bevor es in die Praxis geht.
Die meisten Anwendungen benutzen zwei Arten des kartesischen Koordinatensystems: das linkshändige oder das rechtshändige Koordinatensystem. Beiden gemeinsam ist die Tatsache, dass die x-Achse nach rechts und die y-Achse nach oben verläuft. Um sich die Richtung der z-Achse leichter merken zu können gibt es folgenden Trick: man bewegt die linke oder die rechte Hand so, dass die Finger in die x-Richtung zeigen und die Handinnenfläche nach oben. Die Richtung, in die der Daumen zeigt, ist die Richtung der z-Achse.
DirectX8.0 nutzt das linkshändige Koordinatensystem. Falls Sie also Anwendungen mit einem rechtshändigen Koordinatensystem nach DirectX übertragen wollen, ist es notwendig, dass Sie bestimmte Änderungen an Ihren 3D-Objekten vornehmen. Darauf werden wir jedoch später noch näher eingehen.
Vektoren sind ein wesentlicher Bestandteil in der Programmierung mit DirectXGraphics. Sie finden in der 3D-Programmierung sehr vielseitige Anwendungsmöglichkeiten. Eine vollständige Erläuterung dieser Thematik würde den Rahmen dieser Dokumentation sprengen, deshalb sei hier nur das nötigste erwähnt. Die Grafik zeigt einen Vektor im zweidimensionalen Raum. Gerichtete Vektoren werden grundsätzlich als Pfeil dargestellt.
Vektoren geben also eine Richtung an, die in verschiedenen Bereichen der 3D-Programmierung verwendet werden können. Zum Beispiel wird die Position von Vertices über Vektoren definiert. Desweiteren spielen Vektoren im Zusammenhang mit Matrizen eine wichtige Rolle. Im Kapitel Transformationen und Tiefenbuffer werden wir näher darauf eingehen. Eine konkrete Verwendung finden Vektoren aber zum Beispiel auch in der Einstellung des imaginären Auges, mit dem die 3D-Szene betrachtet wird. Lage und Richtung werden auch hier wieder als Vektoren übergeben.
Ein Vertex ist ein einzelner Punkt im Raum. Er ist die Grundlage der dreidimensionalen Darstellung. Drei Vertices lassen sich als Dreieck darstellen und aus Dreiecken dreidimensionale Körper. Die Tatsache, dass man alle dreidimensionalen Modelle aus Dreiecken zusammensetzt, beruht auf einer besonders praktischen Eigenschaft von Dreiecken: egal wie man die Punkte im Raum positioniert, das Dreieck hat garantiert immer eine glatte Fläche. Rein theoretisch könnte man mit vier Vertices auch Rechtecke bilden, doch das Füllen dieser Rechtecke mit einer Textur wäre zu zeitintensiv in anbetracht der Tatsache, dass die vier Vertices nicht unbedingt alle auf einer Ebene liegen müssen. Deshalb greift man lieber auf Dreiecke zurück.
Zunächst verfügt jeder Vertex über seine Positionskoordinaten x, y und z. Doch ein Vertex kann noch über viel mehr Informationen verfügen. Sie können zum Beispiel jedem Vertex einen Farbe zuweisen. Wenn der Vertex nur als Punkt dargestellt wird erscheint der Vertex in seiner jeweiligen Farbe. Wenn der Vertex jedoch in ein Dreieck mit eingebunden ist, wird das Dreieck bis zu einem gewissen Grad, den Sie auch selbst bestimmen können, in die jeweilige Farbe eingefärbt. Das Bild zeigt wie so etwas zum Beispiel aussehen kann. Hier haben die Vertices die Farben Rot, Grün und Türkis. Alle drei Farben haben die gleiche Stärke und sind deshalb zu gleichen Teilen im Dreieck vertreten. Diese Farbgebungen kann man auch dazu benutzen Texturen, die man auf das Dreieck legt, in eine gewünschte Farbe zu tauchen. Sie können zum Beispiel damit auch bestimmte Bereiche dunkler erscheinen lassen, in dem Sie einfach den jeweiligen Ecken eine dunkle Farbe zuweisen. Darüberhinaus können Vertices Koordinaten für mehrere Texturen besitzen und sogenannte Normalvektoren.
Eine 3D-Primitive ist eine Menge an Vertices, die ein Objekt bilden. Die einfachste Primitive ist ein einzelner Punkt. Primitiven können aber auch Dreiecke bzw. Dreiecksaneinanderreihungen sein.
Oftmals sind Primitiven auch Polygone. Ein Polygon ist ein geschlossenes 3D-Modell, dass sich aus mindestens 3 Vertices definiert. Hier sehen Sie einen Würfel, ein Polygon bestehend aus 8 Vertices die über Dreiecke miteinander verbunden sind.
Obwohl Ihnen in DirectXGraphics nur Dreiecke als kleinstes Polygon zur Verfügung stehen, können Sie damit 3D-Körper erzeugen, die rund bzw. gewölbt wirken. Dies hängt allein davon ab, wieviele Dreiecke Sie verwenden.
Jeder Vertex kann über eine Normale verfügen. Eine Normale ist ein Vektor, der angibt, wie ein Vertex ausgerichtet ist. Dies ist notwendig, wenn Lichtquellen mit ins Spiel kommen. Dann kann anhand der Ausrichtung der Normale zur Lichtquelle ermittelt werden, wie stark ein Vertex bzw. die damit verbundene Fläche angestrahlt wird.
Normalen müssen nicht unbedingt orthogonal zur Fläche verlaufen. Wenn Sie in eine nicht orthogonale Richtung zur Dreiecksfläche zeigen, lassen sich Wölbungen vortäuschen. Die beiden unteren Kugeln demonstrieren den Unterschied.
Die linke Kugel benutzt überhaupt keine Normal-Vektoren. DirectXGraphics rendert daher jede Fläche mit einer ganzheitlichen Schattierung. Unter geschickter Benutzung von Normal-Vektoren kann man jedoch diese Schattierung interpolieren lassen, so dass man den Eindruck erhält, die Fläche wäre gewölbt.
Bei Dreiecken wird für gewöhnlich unterschieden zwischen einer Vorder- und einer Rückseite. Die Vorderseite eines Dreiecks wird gerendert, die Rückseite nicht. Als Vorderseite gilt standardmässig die Seite, bei der die Vertices im Uhrzeigersinn angeordnet sind. Grundsätzlich können Sie aber in DirectXGraphics auch einstellen, dass Dreiecke, bei denen die Vertices gegen den Uhrzeigersinn angeordnet sind, gerendert werden sollen oder das beide Seiten in jedem Fall gerendert werden sollen. Das Nicht-Rendern einer Dreiecksseite aufgrund der Vertex-Anordnung bezeichnet man als Culling.
Um 3D-Modelle von Hand zu erstellen, können Sie Vertices auf 6 verschieden Arten miteinander verbinden.
Punktliste (Point List)
Linienliste (Line List)
Linienkette (Line Strip)
Dreiecksliste (Triangle List)
Dreieckskette (Triangle Strip)
Dreiecksfächer (Triangle Fan)