I have a scenegraph where I rotate objects around multiple points. To do this I have to move the objects between different nodes and after a rotation I copy the WorldRotation to the LocalRotation.

This brings up some small approximation errors and objects get out of alignment with each other. In this simulation I know that my object only can have a certain amount of rotation angles.

Each object can only have the angles 0, 1/2pi, pi or 3/2pi around UNIT_X,Y or Z.

My plan was: Realign the objects every X frames

My implementation:

cube.getLocalRotation().toAngles( m_angles );

for( int m = 0; m < 3; m++ )

{

m_angles[m] = FastMath.HALF_PI * FastMath.floor( m_angles[m]/FastMath.HALF_PI + 0.5f );

}

cube.getLocalRotation().fromAngles( m_angles );

This solve the alignment problem but the axes flips for some angles.

Just doing

cube.getLocalRotation().toAngles( m_angles );

cube.getLocalRotation().fromAngles( m_angles );

doesn't give you the same Quaternion when the x angle is 0 and the y and z angle is 1/2pi.

Question:

Anyone see any obvious solution to this problem? Still pretty new to jMonkey so I might have missed some nice feature or misunderstood something ;).