2013-04-10 15 views
6

Ich habe das Internet nach Tutorials, Implementierungen und Hilfe gesucht. Nichts.GLSL | Billboard Shader, behalten Sie die Skalierung

Das einzige, was ich finden kann, ist Billboard Shader-Implementierungen, die die obere linke 3x3-Matrix einer Mat4 auf Identität setzen. Dies verwirft zwar die Rotation, aber effektiv auch die Skalierung.

Gibt es eine Möglichkeit, Billboarding zu betreiben, das (nicht einheitliche) Skalierung nicht wegwirft?

Hinweis: Ich suche niemanden, um meine Programmierung für mich zu tun. Es ist nur so, dass ich mich nicht um die Einzelheiten kümmern kann. Alle Hinweise in die richtige Richtung sind willkommen.

Antwort

11

Die obere linke 3x3-Matrix enthält die Drehung, aber auch die Skala. Wie du gesehen hast, zerstöre die oberen 3x3 Atomwaffen. Sie sollten die Skala beibehalten, indem Sie zuerst die Skala aus der 3x3 extrahieren. Jede Spalte des 3x3, die als ein Vektor genommen wird, teilt Ihnen den Maßstab in jeder Richtung mit, indem sie die Größe jedes Spaltenvektors nimmt.

Wenn Ihre 4x4 Matrix

RSX RSY RSZ T 
0  0  0  1 

ist dann die Skalierungsfaktoren sind

xScale = ||RSX|| 
yScale = ||RSY|| 
zScale = ||RSZ|| 

diejenigen sparen, wird eine neue 4x4-Matrix bilden, tun, was Sie bereits tun, sondern beinhaltet auch die Skala .

xScale 0  0  xT 
0  yScale 0  yT 
0  0  zScale zT 
0  0  0  1 
+0

Funktioniert wie ein Charme! Der Schritt zum Abrufen der Skalierungsfaktoren wurde verpasst. –

Verwandte Themen