Dieses Projekt zeigt die Einbindung eines Effektfiles und die Benutzung von Vertex
Deklarationen in Verbindung mit Shadern. Der Shader kann aktiviert und deaktiviert werden um die Veränderungen deutlich zu machen.
Shader Einleitung
Um in DirectX Textureffekte zu erstellen, wurde die
FFP (Fixed Function Pipeline) benutzt. Sie beinhaltet verschiene in der Hardware implementierte Effekte. Dadurch werden die Berechnungen unglaublich schnell abgearbeitet. Leider ist die
FFP nicht sehr flexibel und in ihren Möglichkeiten beschränkt.
Um alles flexibel zu gestalten beinhalten moderne Grafikkarten Shadereinheiten. Dies sind kleine Rechenwerke, die frei programmierbar
sind und somit keiner festen Struktur unterliegen.
Bei den Möglichkeiten der Berechnung sind der Phantasie keine Grenzen gesetzt.
In den Anfängen wurden Shader in Assembler geschrieben. Aber durch die ständige Weiterentwicklung wurde eine eigene Sprache erschaffen, die
HLSL (High Level Shader Language).
Arbeitet man mit Shadern, ist es sinnvoll keine FVF Codes für die Vertexdaten zu benutzen. Die Neuerung ab
DirectX 9 nennt sich Vertex Declarations,
über die sich mit verschiedenen Vertex-Elementen ein VertexStream
erstellen lässt, der keine feste Vorgabe hat. Damit der Shader die Daten im Stream finden kann, wurden „Semantics“ eingeführt.
Da alle Vertexdaten über den Shader laufen, wird auch keine Transformation der Daten durchgeführt.
Um das Objekt aber später sehen zu können, muss dieses in den Worldspace. Damit wir wissen wie und wo wir auf das Objekt schauen, fehlt noch der Viewspace. Daraus ergibt sich die WordviewProjektion – Matrix, die die Vertexdaten im Shader transformiert.
Aufbau des Effektfiles
Der Shadercode liegt in der Regel nicht in der Applikation, sondern in einem externen Effektfile.
Zur Laufzeit wird der Effektfile geladen und bei bedarf kompiliert und ausgeführt.
Die Applikation gibt die Vertexdaten an den Shadereingang. Der Verarbeitet die Daten und gibt diese wieder zurück. Das Format der Eingangs- und Ausgangsdaten muss dabei nicht gleich sein.
Es spielt auch keine Rolle woher die Daten kommen oder wohin Sie gehen.
Der Effektfile besteht aus 4 Teilen:
Deklaration
Dort werden alle Variablen und die Ein- und Ausgangsstruktur der
Vertexdaten festgelegt
Vertexshader
Der Vertexshader verarbeitet alle Vertexdaten des Streams
Pixelshader
Der Pixelshader verarbeitet die Farbdaten per Pixel
Technik
Dort wird der Shader kompiliert und ausgeführt
Der einfache VertexColorshader
Die Funktionsweise des Shaders ist recht simpel. Der Effektfile besteht aus einem VertexShader und besitzt keinen
PixelShader. Der Eingangsstream beinhaltet nur die Position der
Verticen. Der Ausgangsstream besteht aus Position und Color. Der Vertexshader gibt jedem Vertex einen neuen Farbwert. Die Farbwerte werden aus der Applikation an den Shader übergeben
Die Funktionsweise des Shaders ist recht simpel. Der Effektfile
besteht aus einem VertexShader und besitzt keinen PixelShader. Der
Eingangsstream beinhaltet nur die Position der Verticen. Der
Ausgangsstream besteht aus Position und Color. Der Vertexshader gibt
jedem Vertex einen neuen Farbwert. Die Farbwerte werden aus der
Applikation an den Shader übergeben
Hinweis
Um dieses Projekt ausführen zu können, muss
VB.Net 2008, die sdxBaseEngine und
die SlimDX-Runtime installiert sein. Haben Sie Fragen zu einem Projekt, wenden Sie sich bitte immer
zuerst an den entsprechenden Autor. Für weitere Fragen zu Visual Basic
SlimDX nutzen Sie bitte unser DirectX-Forum.