Open lvignals opened 10 years ago
Using the rotationZ property instead of the rotate() function carries the same issue:
rotationZ += ROLL * dt; //same Issue rotationZ -= ROLL * dt; //same Issue
To reproduce issue: load a model in an ObjectContainer3D. Rotate the model along Y by 90 degrees (model will Yaw as expected) then Rotate along Z and you will find that your model Picth is affected instead of the Roll because rotationZ is using the Global Z Axis instead of the local Z axis which should have been rotated 90 degrees since the ObjectContainer3D was first rotated along Y by 90 degrees.
I hope that helps :-)
You are right! I've searched in commits and it's not so easy to found the cause!
Hi! I noted that since 4.1.6 (Master or Dev branch) the ObjectContainer3D rotate() function is using the global Z axis (only for Z) instead of the local Z axis. Below is a sample with the breaking code from 4.1.4 Gold (working as expected) to 4.1.6 (Master or Dev, not working as expected)
//For ObjectContainer3D since 4.1.6 and above if (...) rotate(Vector3D.Y_AXIS, -YAW * dt); //causes rotation around local Y if (...) rotate(Vector3D.Y_AXIS, YAW * dt); //causes rotation around local Y if (...) rotate(Vector3D.X_AXIS, PITCH * dt); //causes rotation around local X if (...) rotate(Vector3D.X_AXIS, -PITCH * dt); //causes rotation around local X if (...) rotate(Vector3D.Z_AXIS, ROLL * dt); //causes rotation around GLOBAL Z (Issue) if (...) rotate(Vector3D.Z_AXIS, -ROLL * dt); //causes rotation around GLOBAL Z (Issue)
Thanks and great work on Away3d, great library!