If you want to write a flight sim., then I don’t think maintaining seperate yaw, pitch and roll angles is a good idea. You get all sorts of headaches this way (eg. gimbal lock, and how to compute “up”).

Try using quaternions, or update your model-view matrix directly (though there are issues with conditioning of the matrix with this approach I think).

Using a quaternion for your orientation is certainly one popular way of making sure you don’t get these problems. When rolling/pitching/yawing, you just add in an appropriate new quaternion (oriented in the reference frame of your current).

An alternate mechanism is to keep two vectors; say “right” and “up”. When you yaw, you rotate “right” around “up”. When you pitch, you rotate “up” around “right”. And, last, when you roll, you rotate both right and up around (right cross up). Make sure you re-normalize these vectors ever so often (every frame is probably OK if it’s only for one object).

Adjust your cross production function and/or vector math based on the left- or right-handedness of your coordinate system.

Going from these vectors to a viewing matrix is pretty simple: right, up and (right x up) represent the three x/y/z rows of your viewing matrix; just slam translation in there and go!