16 minutes ago, calioranged said:I can picture all this just fine. What I cannot picture is a situation where there would be more than one non-zero value in the rotation vector - and how this would affect the viewing direction.
Okay, first of all, there is no such thing as a rotation vector - at least to my knowledge. There is only a rotation matrix!
A vector "... is a geometric object that has magnitude (or length) and direction" (https://en.wikipedia.org/wiki/Euclidean_vector)
Let's try something different. Draw a 2d coordinate system with the y-axis pointing upwards, and the x-axis pointing to the right. Make the distance between each value on the axis 1cm. Now draw a point with x coordinate 2 and y coordinate also 2. Now draw a direct line from the Origin to this point. Make an arrow out of that line by placing an arrowhead at the location of the point. Now you have drawn the vector (2,2). You can measure the length of this line and will probably get to the result sqrt(2*2 + 2*2) = sqrt(8) = 2,83cm. You will also see that the vector points into the northeast if you treat your coordinate system as a compass with the y-axis pointing to the north. For a direction vector, its length does not matter. The vector (1,1) has half the length, but it points in the same direction as the vector (2,2): Northeast!
I hope you can follow so far. The next step we will do is to switch to 3d by just adding a 0 to our vector. (2,2,0). If the third dimension is now the height, our vector is still pointing to the north-eastern direction, but parallel to the surface, since its third component is 0. So now try the following: Take a pen and place it vertically onto the origin of your coordinate system. It is now aligned with your z-axis. Think of the other end of the pen as a point which is located on your z-axis where the length of the pen is the distance to the origin. Let's call the distance L. If you would create a vector to the pen's tip, it would be (0, 0, L). Is everything clear so far?
Now tilt the pen towards your y-axis while keeping contact to the origin until it lies on the y-axis. You have just rotated the point on the tip of the pen by 90 degrees around the x-axis, right? So the new vector is now (0, L, 0) since your pen is now lying on the y-axis with the distance to the origin still being L. The axis you rotated around was the x-axis, which can also be described by a vector: (X, 0, 0). X can have any value because all that matters for rotation is the direction of the axis.
So next thing you should do is reset everything. Put the pencil pointing upwards again. This time tilt the pen into the direction of the x-axis until it lies on the paper. Now you have rotated around the y-axis. So your pen's tip is now located at (L, 0, 0). So if you repeat those two steps, you will notice, that rotating around one of both axes will maintain a right angle between the axis and the pen.
So now comes the last step. Do the same but with the vector being the axis of rotation. Tilt the pen until it lies on the paper while keeping up a right angle between pen and vector. There only two possible outcomes. The pen can either be pointing to the northwest or the southeast, otherwise, there would not be a right angle between the vector ant the pen. So now you just rotated 90 degrees around a vector with more than one non-zero value!!! So if you measure now, where the tip of your pen is located in your coordinate system, You will get a new vector.
Since your pen lies flat on the paper, it has only x and y values. The z value is 0. Due to the special construction of this example, both values for x and y are identical, but with a different sign. The exact value depends on the length of the pen that you have chosen and which one of the values is negative depends on the rotation direction. If you rotated to the northwest, your vector would look like this (-V, V, 0) where V is the length dependent value.
Okay... after this rather long example, let's translate it to your code:
glm::mat4 rotator { glm::rotate(glm::mat4(1.0F),
glm::radians(degrees),
glm::vec3(rotation.x, rotation.y, rotation.z)) };
MVP.view.direction = rotator * MVP.view.direction;
Let's consider your view direction for the moment not being your view direction. Instead, it is a vector to an object... the tip of the pen ;). So give it the value (0,0,2). Now use the rotation vector (2,2,0) and 90 degrees as in the previous example.
Run the calculation and what you should get is either the vector (-V, V, 0) or (V, -V, 0) with V being 1,414 = sqrt(2). Which vector you get depends only on the direction of rotation. You have just programmed the pen example.
Keep in mind, that glm calculates you a rotation matrix out of the axis and the degrees you provide. So you are actually not using a vector and an angle for the rotation itself but a matrix. You just need them to create the matrix.
Greetings