Hello Guest

# MVP Translation when Rotating

• 0 Replies
• 4029 Views

#### rejooh

• 1
##### MVP Translation when Rotating
« on: April 03, 2013, 15:57:14 »
Hello everyone,
I already asked this question in another forum but didn't get any answers so far. Hopefully you are able to help me regarding a question about camera rotation. Following multiple tutorials (LWJGL-Wiki MVP: http://www.lwjgl.org/wiki/index.php?title=The_Quad_with_Projection,_View_and_Model_matrices & OpenGL-Tutorial.org: http://www.opengl-tutorial.org/beginners-tutorials/tutorial-6-keyboard-and-mouse/) I was able to create some cubes that are rendered with the use of model-, view- and projectionmatrices in Java 7 using LWJGL. Since yesterday morning I am trying to implement camera movement and rotation. Everything seems to work fine, but with a closer look the camera (respectively the world) seems to translate when rotating.

Is that behavior normal or is something seriously wrong?

The following video shows what I am trying to describe: http://www.youtube.com/watch?v=no4iTw4WPMw

Here is the code, that creates the matrices, Projection (with 45f, 1280f / 720f, 0.1f, 100f):
Code: [Select]
`[code]public static Matrix4f projectionMatrix(float fov, float aspect, float near, float far) { float frustum = far - near; float scaleY = (float)(1f / Math.tan(Math.toRadians(fov / 2f))); float scaleX = scaleY / aspect; Matrix4f result = new Matrix4f(); result.m00 = scaleX; result.m11 = scaleY; result.m22 = -((far + near) / frustum); result.m23 = -1; result.m32 = -((2 * near * far) / frustum); return result;}`

View (eye is the cameras position, up is (0f, 1f, 0f):
Code: [Select]
`public static Matrix4f lookAtMatrix(Vector3f eye, Vector3f target, Vector3f up) { Vector3f zaxis = new Vector3f( target.x - eye.x, target.y - eye.y, target.z - eye.z ); zaxis.normalise(); Vector3f xaxis = new Vector3f(); Vector3f.cross(up, zaxis, xaxis); xaxis.normalise(); Vector3f yaxis = new Vector3f(); Vector3f.cross(zaxis, xaxis, yaxis); Matrix4f rotation = new Matrix4f(); rotation.m00 = xaxis.x; rotation.m01 = yaxis.x; rotation.m02 = zaxis.x; rotation.m10 = xaxis.y; rotation.m11 = yaxis.y; rotation.m12 = zaxis.y; rotation.m20 = xaxis.z; rotation.m21 = yaxis.z; rotation.m22 = zaxis.z; rotation.m33 = 1; Matrix4f translation = new Matrix4f(); translation.m00 = 1; translation.m11 = 1; translation.m22 = 1; translation.m30 = -eye.x; translation.m31 = -eye.y; translation.m32 = -eye.z; translation.m33 = 1; Matrix4f result = new Matrix4f(); Matrix4f.mul(rotation, translation, result); return result;}`
I calculate the target with the following code (position, yaw and pitch are attributes of the camera):
Code: [Select]
`Vector3f target = new Vector3f( position.x - (float) (Math.cos(Math.toRadians(pitch)) * Math.sin(Math.toRadians(yaw))), position.y + (float) (Math.sin(Math.toRadians(pitch))), position.z + (float) (Math.cos(Math.toRadians(pitch)) * Math.cos(Math.toRadians(yaw))));`
The model matrices shouldn't be the problem.

The vertex shader calculates the MVP (but also shouldn't be the problem):
Code: [Select]
`#version 330 coreuniform mat4 projectionMatrix;uniform mat4 viewMatrix;uniform mat4 modelMatrix;in vec4 in_Position;in vec4 in_Color;out vec4 pass_Color;void main(void) { gl_Position = projectionMatrix * viewMatrix * modelMatrix  * in_Position; pass_Color = in_Color;}`

Hope, someone is able to help me.
Thanks, rejooh.[/code]