Difficulty setting up the viewmatrix rotation

Hello again,

as a continuation of my previous thread where I fought with getting the models to actually render on the screen, I implemented the joml math library and conitnued on. Now I have a following case:

  • In my scene I have a model of a dragon and a camera.
  • I can rotate and move the dragon in any direction I want, and the forward vector of that model changes accordingly with the rotation.
  • Then I have my camera that is defined by the viewMatrix to which I would like to apply the same actions as to that model.
  • There are two problems with this:
    • When I rotate, the forward vector diverges in the opposite direction to the direction of rotation. Ex. Lets assume that I start of facing in the X direction. My forward vector is also facing in the X direction. Then if I rotate my camera to face the Z direction, my forward vector is not Z but -Z. As the forward vector is calculated based on the rotation quaternion, and is correct for the dragon model, I believe the issue is with the viewMatrix (I should be facing in the -Z direction)
    • Once I move the camera, any rotation that I apply to it is around the world origin and world axis. I know this is a trivial problem, however, I find it difficult to get this working as well.
  • Those problems occur even though I apply exactly the same methods as I do for the dragon model.

I believe, the issue is not with the rotation methods or the forward vector calculation (although I found that the JOML function for this did not give me the desired results), but with my viewMatrix.

I define the viewMatrix as follows:

public static Matrix4f createViewMatrix(Camera camera)
		Matrix4f viewMatrix = new Matrix4f();
		Quaternionf rotation = new Quaternionf(camera.getTransform().GetRot());
		Vector3f position = new Vector3f(camera.getTransform().GetPos());
		Vector3f up = new Vector3f(camera.getTransform().getUp());
		Vector3f forward = new Vector3f(camera.getTransform().getForward());
		Vector3f pos = new Vector3f(camera.getTransform().GetPos());
		return viewMatrix;

From my testing, I know that the up and forward vectors are calculating correctly.
Any insight would be greatly apprciated.

In JOML there is a quaternion method for roate:
rotateAxis(angle, axis). I thought that in the axis I should input the new local axis (forward, up and right) however, through trial and error the dragon model works using world axis instead.

Do you have any ideas guys?


  1. use a math library instead of coding your own (that’s faster and libs are in general tested for errors)
  2. the “view matrix” is the inverse of the camera’s “transformation matrix”

note: the original “forward” vector doesnt point in the looking direction, but in the opposite direction