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
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.