I'm working on an OpenGL based project (in C#), employing Quaternions to rotate my camera I first tried to:
cameraOrientation = cameraOrientation * framePitch * frameYaw;
This accumulated an undesired roll in my cam-controller which made rotations unusable. I found a post on stack exchange which suggested this reordering of operations:
cameraOrientation = framePitch * cameraOrientation * frameYaw;
Which completely solved this accumulation of roll. While I'm comfortable with matrix multiplication, I can't seem to understand why this removes roll accumulation. Does anybody have any articles or images so I can grok what's happening here?
It feels weird not to understand such a fundamental operation in my project. Thanks!