Java-Gaming.org Hi !
 Featured games (83) games approved by the League of Dukes Games in Showcase (581) Games in Android Showcase (162) games submitted by our members Games in WIP (632) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Quaternion rotations and gimble lock  (Read 1128 times) 0 Members and 1 Guest are viewing this topic.
arthor

Junior Newbie

 « Posted 2006-03-11 12:12:33 »

Hi, I've been trying to implement a camera class for a couple of weeks now ive finally got something thats mostly working using quaternions for rotation and vectors for movement, but I think im suffering from gimble lock. The more i turn to the side the less height i can acheive turning upwards. Im fairly certain the vector section is correct and is mostly independant from the rotation.

Heres my code for the rotation

 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34 `public void updateCamera(){   Quat4f rotation = new Quat4f();         AxisAngle4f axisAngleX = new AxisAngle4f(cameraX.x, cameraX.y, cameraX.z, (float)Math.toRadians(angleX));   AxisAngle4f axisAngleY = new AxisAngle4f(cameraY.x, cameraY.y, cameraY.z, (float)Math.toRadians(angleY));         Quat4f quatXRotation = new Quat4f();   Quat4f quatYRotation = new Quat4f();         quatXRotation.set(axisAngleX);   quatYRotation.set(axisAngleY);         rotation.mul(quatYRotation, quatXRotation);   rotation.normalize();      Matrix4f newViewMatrix = new Matrix4f();   newViewMatrix.set(rotation);   newViewMatrix.transpose();         float[] rotationMatrixArray = new float[]   {   newViewMatrix.m00, newViewMatrix.m01, newViewMatrix.m02, 0,   newViewMatrix.m10, newViewMatrix.m11, newViewMatrix.m12, 0,   newViewMatrix.m20, newViewMatrix.m21, newViewMatrix.m22, 0,    0, 0, 0, 1   };      gl.glLoadIdentity();      glu.gluPerspective(60.0, 800/600, 2.0, 500.0f);            gl.glTranslatef(cameraPosition.x, cameraPosition.y, cameraPosition.z);      gl.glMultMatrixf(rotationMatrixArray);   }`

Am i doing something completely wrong? Or do i need to approach this from a different angle.
Gannin

Senior Newbie

 « Reply #1 - Posted 2006-03-11 23:30:01 »

You would probably be better served by asking this question in one of the OpenGL forums here.
Jeff

JGO Coder

Got any cats?

 « Reply #2 - Posted 2006-03-12 01:11:34 »

AIUI the whoel point of Quaternions is that they *don't* suffer from gimble lock.

As this is a heavy 3D math question I would *defintiely* ask it in one of the 3D forums (JOGL or Java3D)

Got a question about Java and game programming?  Just new to the Java Game Development Community?  Try my FAQ.  Its likely you'll learn something!

http://wiki.java.net/bin/view/Games/JeffFAQ
zero

Junior Devvie

 « Reply #3 - Posted 2006-03-12 01:54:59 »

hey arthor,

what are the values for the vectors cameraX and cameraY? Simply, the axes <1,0,0>, <0,1,0>?
and do you change angleX/angleY on key strokes?

further, what is ment by 'The more i turn to the side the less height i can acheive turning upwards'?
Rotating around the y-axis, right?
Mike Jacobs

Junior Devvie

 « Reply #4 - Posted 2006-03-12 04:17:25 »

... the whoel point of Quaternions is that they *don't* suffer from gimble lock.

Jeff is right if the Quaternion is used to represent an orientation.  On the surface, it appears that the quaternions may be used to represent axis rotations.  I included an overview of Java 3D quanternions in this article that might prove useful (http://jdj.sys-con.com/read/99792.htm).  The quaternions are covered in the section entitled 'Slicker than Euler' on page 3.

Mike

Special Effects for Java 3D games: http://www.indietechnologies.com
arthor

Junior Newbie

 « Reply #5 - Posted 2006-03-12 12:14:35 »

Thanks for the interest, as sugessted ive posted again in one of the 3d forums, JOGL to be specific, hopefully that is a better place for the question. Ive also answered some of the questions asked in the new post

http://www.java-gaming.org/forums/index.php?topic=12801.0
Pages: [1]
 ignore  |  Print

You cannot reply to this message, because it is very, very old.

 MrMapcom (12 views) 2015-05-23 20:26:16 MrMapcom (19 views) 2015-05-23 20:23:34 Waterwolf (29 views) 2015-05-20 15:01:45 chrislo27 (35 views) 2015-05-20 03:42:21 BurntPizza (70 views) 2015-05-10 15:53:18 FrozenShade (55 views) 2015-05-07 09:11:21 TheLopais (218 views) 2015-05-06 13:36:48 TheLopais (202 views) 2015-05-06 13:35:14 TheLopais (206 views) 2015-05-06 13:33:39 TheLopais (226 views) 2015-05-06 13:32:48
 Spasi 32x BurntPizza 16x Riven 13x ra4king 12x Husk 11x EgonOlsen 11x theagentd 11x DavidBVal 11x KevinWorkman 9x princec 8x scanevaro 8x opiop65 7x revers 6x KaiHH 6x SauronWatchesYou 6x MrPork 5x
 List of Learning Resources2015-05-05 10:20:32How to: JGO Wikiby Mac702015-02-17 20:56:162D Dynamic Lighting2015-01-01 20:25:42How do I start Java Game Development?by gouessej2014-12-27 19:41:21Resources for WIP gamesby kpars2014-12-18 10:26:14Understanding relations between setOrigin, setScale and setPosition in libGdx2014-10-09 22:35:00Definite guide to supporting multiple device resolutions on Android (2014)2014-10-02 22:36:02List of Learning Resources2014-08-16 10:40:00
 java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org