Ok, I will try and be as concise as possible. I am not very good with math and what might seem obvious to you will most likely be rocket science to me.
I am using Three.js w/CSS3DRenderer to create a virtual gallery space.
I need a first person perspective, like an FPS game.
I have gotten the camera to move forwards, backwards, left and right all successfully.
However, when I go to rotate the camera, I get the result 
The camera is rotating its local axis, but what I need is for the viewport, not the camera, to rotate, like

So what I need is for the camera to orbit around a pivot point/vector, and then refocus by using Object3d.lookAt()
I am aware that I can solve my problem by parenting the camera as a child of another object, and then rotating the axis of the object. However, I would rather do the math myself.
In short, I want to understand how to rotate one vector point around another, and how to represent that relationship mathematically.
I do not want to utilize a script, e.g., three.js pointer_lock controls, to get the job done. I want to get my hands dirty with the actual math.
Any advice or links to tutorials would be much appreciated!!!
Below is an example of a camera being rotated around a box.
It works by the fact that applying a rotation matrix always rotates an object around the origin. This is in contrast to just modifying the
rotationproperty, which rotates the object around its own centre as you found out. The trick here is moving the camera 200 units away from the origin, such that when we apply the rotation matrix, it then rotates around the origin in a circle.Since the box is at the origin, this will rotate the camera around the box. Then
lookAtis used to point the camera towards the box.Here is a low-level explanation on the subject if you're looking to learn more: http://webglfundamentals.org/webgl/lessons/webgl-scene-graph.html