Ja man glaubt es kaum: ich habe heute mein “Mathematik für Informatiker” Buch vorgeholt und nachgelesen wie man Matrizen multipliziert. Hätte ja nicht gedacht, dass ich in dem Bereich mal was programmiere…
Wie kam es dazu? Mein Würfel hat mittlerweile Caps erhalten. Das Problem ist, dass man die Caps in der richtigen Reihenfolge zeichnen muss, weil sie sonst entweder Arbeitsflächen überdecken oder von welchen überdeckt werden. Für den Normalfall nicht kompliziert: wenn die Hälfte der Desktops gezeichnet ist, müssen die Caps gezeichnet werden.
Nun ist es aber auch möglich den Würfel vertikal zu rotieren und das ändert alles. Jetzt müssen die Caps vor bzw. nach dem Zeichnen des Würfels gezeichnet werden, falls der Würfel so weit geneigt ist, dass die hintere Wand höher ist als die vordere.
Und nun wird es kompliziert. Ich dachte ja ich komme mit Dreicksmathematik daran. Geschicktes Einsetzen von Winkeln mit Sinus, etc. Nach mehreren Stunden hab ich es aufgegeben und erkannt, dass es nicht anders geht. Mir wurde klar ich muss die Y-Werte ausrechnen und miteinander vergleichen.
Nun wie macht das OpenGL? Es gibt zwei Matrizen: die Modelview und die Projection Matrix. Die Modelview enthält sämtliche aktuellen Transformationen, die Projection die perspektivische Verzerrung. Also muss man die Koordinaten mit der Modelview Matrix multiplizieren (hier brauchte ich mein Buch), diese dann noch einmal mit der Projection Matrix. Nun hat man tolle Werte, die man nach bestimmten Regeln dividieren muss um schlussendlich den Viewport darauf zu multiplizieren und hier ist der y-Wert. Das ganze kann man gleich vier mal machen um alle Werte zu erhalten.
So und nach einem Tag Programmieren, an dem ich eigentlich Lernen wollte, habe ich nun einen schönen Würfel mit Cube Caps: