X,Y,Z - Rotation aus 3x3 Matrix errechnen?

Previous topic - Next topic

backslider

Hi Leute,

kann mir jemand sagen, wie ich aus einer OpenGL 3x3 - Matrix (als [16]-Array) die Rotationswerte für X,Y,Z in c++ errechnen kann?

MfG

kanonet

Nicht in C++ aber in GLBasic, aber vermutlich kannst du das adaptieren:
Wie das geht kannst du einfach im EntitySystem sehen.
Wenn m[] deine matrix ist, dann müsste das folgende funktionieren:

Roll (X-Rotation):
Code (glbasic) Select
LOCAL c = 1.0 / COS(-ASIN(m[2]))
IF ABS(c) < 10000000
roll = ATAN( m[6]*c , m[10]*c )
ELSE
roll =  0.0
ENDIF


Yaw (Y-Rotation):
Code (glbasic) Select
yaw = -ASIN(m[2])

Pitch (Z-Rotation):
Code (glbasic) Select
LOCAL c = 1.0 / COS(-ASIN(m[2]))
IF ABS(c) < 10000000
pitch = ATAN( m[1]*c , m[0]*c )
ELSE
pitch = ATAN( -m[4] , m[5] )
ENDIF


Hoffe ich habe beim zusammenkürzen keinen Fehler gemacht. ;)
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

backslider

Ach wie doof ich bin und nicht einfach im ES gucke...
Aber danke für deine Mühe und ich denke, das kriege ich portiert. :)

MfG