I found the OpenGL approach of rotating the scene confusing at first
but I think it makes sense. A program like blender is used to place
objects to be viewed later whereas OpenGL's goal is to show objects
that have already been placed so it might be said that the blender and
OpenGL are sort of inverses of one another. I think it is
conceptually easier to place a camera so based on some suggestion I
found on the web I wrote a camera class which allows me to specify
camera coordinates and orientation as one would in Blender. When the
opengl scene is rendered, before drawing any objects I first call a
method in my camera class which performs a gl translation and rotation
which are inverses of the camera's position and orientation. This way
my camera class allows me to conceptually simplify things. It does
get tricky performing the inverse rotation because the most meaningful
rotations of the camera (I call them yaw, pitch, and roll) are
relative to the camera whereas the inverse gl rotations are relative
to the world the camera belongs to. Or at least I think they are, I'm
still trying to sort that out! It's also important to keep in mind
that unlike 2D rotations, 3D rotations are not commutative; doing
rotation a then rotation b may yield completely different result from
rotation b then rotation a.