Gegeben seien folgender VertexBuffer VB und IndexBuffer IB
Vertexshader
#version 150 core
uniform mat4 viewProj;
in vec3 vs_in_pos;
void main(void) {
gl_Position = viewProj * vec4(vs_in_pos,1);
fs_in_red = vs_in_red;
}
Fragmentshader
#version 150 core
out vec4 fs_out_color;
void main(void) {
fs_out_color = vec4(1);
}
Gegeben sei nun folgender VertexBuffer und IndexBuffer .
Führen Sie mit diesen Daten ebenfalls die Graphics Pipeline aus. Gleichbleibende Berechnungen können Sie aus dem ersten Aufgabenteil übernehmen.
Musterlösung vom 13.06.2012:
Vertex Shader
Programmierbarer Teil der Pipeline. Vertexdaten werden transformiert.
Da jeweils drei Werte des Floatbuffers einen Vertex ergeben, werden drei Shaderinstanzen für die Vertices erzeugt.
Nach Anwendung der View - und Projektionsmatrix liegen die Daten in den Clipping Coordinates.
Output: Koordinaten in Clipping Coordinates
Primitive Assembly
Fester Teil der Pipeline. Die Koordinaten werden über die angegebene Topologie (GL_TRIANGLE) zu einem Dreieck.
Ouput: Ein einziges Primitiv (Dreieck). ( )
Primitive Processing
Fester Teil der Pipeline. Hier werden die Primitive geclippt, die Koordinaten homogenisiert, auf das Anzeigedevice projiziert und schließlich gecullt.
Offenbar liegen und nicht innerhalb des kanonischen Viewvolume. Somit muss das Dreieck geclippt werden.
Schnittpunkte mit der Achse :
Gerade von nach
Gerade von nach
Schnittpunkt mit der Achse :
Gerade von nach
Gerade von nach
Somit ergeben sich vier neue Koordinaten, die wieder zu Dreiecken zusammengesetzt werden müssen.
, ,
, , ,
Im nächsten Schritt werden die Koordinaten homogenisiert.
Homogenisieren ergibt:
Hiernach werden die Koordinaten auf den Viewport projiziert:
Hier beispielhaft für die Koordinate
Im letzten Schritt werden die Dreiecke gecullt. Da der positive Drehsinn Counter Clockwise gewählt ist und die Koordinaten in der Reihenfolge gerendert werden, bestehen die Dreiecke den Test (vergl. Bild).
Output: Drei Dreiecke , und .
Zweiter Teil: Dreieck wird gecullt. Alle notwendigen Berechnungen lassen sich von oben übernehmen.