3D Flash Tutorial
Selbst in Flash 8 kann man leider nur "affine Transformationen" durchführen. Das bedeutet, parallele Linien sind auch nach der Transformation noch parallel. Damit sind zwar Rotieren, Neigen und Skalieren möglich, aber Verzerren mit "Perspektive" lässt sich damit nicht bewerkstelligen. Daran ändert leider auch die neue Matrix Klasse in Flash 8 nichts.
Mittlerweile hat Thomas Pfeiffer aka "kiroukou", die 3D Klasse "Sandy" geschrieben, die 3D Verzerrung emuliert, indem sie die Bitmap in mehrere Dreiecke zerteilt und dann mit affinen Transformationen auskommt.
Projektionsebene
Ich will Euch nicht mit mathematischen Details langweilen, aber ein kleiner Exkurs in die Lineare Algebra kann nicht schaden:
Seien f1, f2, f3, f4 die vier markanten Punkte als 3D Vektoren, die wir im Video markiert haben. x und y lesen wir aus den Markierungen aus. Den z-Wert setzen wir fest auf 1, und erweitern somit die euklidische Ebene.
Mit diesen vier Vektoren bilden wir ein Gleichungssystem aus drei Gleichungen:
f1 a + f2 b + f3 c = f4
bzw:
f1.x * a + f2.x * b + f3.x * c = f4.x
f1.y * a + f2.y * b + f3.y * c = f4.y
f1.z * a + f2.z * b + f3.z * c = f4.z
a, b und c sind skalare Variablen, die wir als nächstes herausfinden müssen, indem wir das lineare Gleichungssystem mit dem Gauß-Jordan Verfahren lösen.
Schließlich erhalten wir folgende erste Transformationsmatrix:
[ f1.x * a | f2.x * b | f3.x * c ]
[ f1.y * a | f2.x * b | f3.x * c ]
[ f1.z * a | f2.x * b | f3.x * c ]
Diese Matrix M sendet die Koordinaten des sogenannten "Standard Frame" (SF) - (1,0,0), (0,1,0), (0,0,1), (1,1,1) - auf die vier Punkte f1, f2 ,f3, f4.
Genau dasselbe müssen wir als nächstes für die vier ausgesuchten Stellen g1, g2, g3, g4 innerhalb der Textur machen. Diese zweite Matrix N sendet die Koordinaten des SF auf die vier Punkte g1, g2, g3, g4.
Wir wollen aber nicht zweimal vom "Standard Frame" woanders hin transformieren, sondern von der Textur zum SF und dann zum Dummy, also G->S->F.
Mit der Matrix N haben wir S->G und müssen das nur noch invertieren (N') um G->S zu erhalten.
Schließlich multiplizieren wir M und N' und erhalten T.
Die Transformationsmatrix T können wir jetzt mit beliebigen Referenzpunkten der Textur multiplizieren - wir nehmen natürlich die vier Eckpunkte - und erhalten ihre Repräsentation im Movie. Wir müssen die Koordinaten lediglich noch durch Ihre z-Werte dividieren, damit z wieder zu 1 wird und sind fertig.