Hi all, I’ve been trying to make a 3D camera using Euler angles and I’ve been getting some unexpected results. I’m using LWJGL and I’ve plotted out a very basic flat scene to test whether the camera’s working properly. I used the algorithm at the end of the FAQ question below to create and multiply the 3 rotation matrices X, Y and Z.
http://www.cs.princeton.edu/~gewang/projects/darth/stuff/quat_faq.html#Q36
To transform to the perspective of the rotated viewport I have the method below:
public void transform(Player player) {
float xcos = (float) Math.cos(Math.toRadians(xrot));
float xsin = (float) Math.sin(Math.toRadians(xrot));
float ycos = (float) Math.cos(Math.toRadians(yrot));
float ysin = (float) Math.sin(Math.toRadians(yrot));
float zcos = (float) Math.cos(Math.toRadians(zrot));
float zsin = (float) Math.sin(Math.toRadians(zrot));
float[] mat = new float[16];
mat[0] = ycos * zcos;
mat[1] = -ycos * zsin;
mat[2] = ysin;
mat[4] = xsin * ysin * zcos + xcos * zsin;
mat[5] = -xsin * ysin * zsin + xcos * zcos;
mat[6] = -xsin * ycos;
mat[8] = -xcos * ysin * zcos + xsin * zsin;
mat[9] = xcos * ysin * zsin + xsin * zcos;
mat[10] = xcos * ycos;
mat[3] = mat[7] = mat[11] = mat[12] = mat[13] = mat[14] = 0.0f;
mat[15] = 1.0f;
GL11.glMultMatrix((FloatBuffer) BufferUtils.createFloatBuffer(16).put(mat).flip());
}
With xrot, yrot and zrot being the rotation angles in degrees. I have some other methods that just add to these values to add/subtract from the angles.
The results are fairly hard to describe. When I only change one rotation angle the scene seems to rotate correctly, but when I add a second the scene seems to spiral out of control. Can anyone spot any errors that I’ve made?
Thanks