First, start with something that can load FBX files. If you've got this working - then by all means use your own code. But I suggest also looking at the WinForms 2 sample which shows a rotating FBX model.
Next is handling user input. In XNA you will want to look at the Mouse class (MSDN). The basic pattern for using it is to keep the current and previous mouse states and then compare the difference in positions.
MouseState lastMouseState; protected override void Update(GameTime gameTime) { MouseState mouseState = Mouse.GetState(); int deltaX = mouseState.X - lastMouseState.X; int deltaY = mouseState.Y - lastMouseState.Y; // ... }
For Keyboard (MSDN) the process is pretty much the same - compare the last and current states.
If you are using WinForms (as per that sample), you'll have to hook up events to the model viewer control and handle those instead.
Finally, what you are trying to implement here is called an orbit camera. I don't think there's any definitive way to implement this. It's just a series of matrix transformations.
The WinForms 2 sample I linked implements most of what you want already. Look at ModelViewerControl.Draw in that sample for where it sets up its matrices. Here's a modified version that you can work from:
Matrix world = Matrix.CreateRotationY(rotateY) * Matrix.CreateRotationX(rotateX); Matrix view = Matrix.CreateLookAt(modelCenter + new Vector2(0, 0, modelRadius + zoom), modelCenter, Vector3.Up);
Then it's simply a matter of taking those delta inputs from earlier and then accumulating those deltas in the appropriate variable. For example:
const float rotateSpeedFactor = 0.05f; // this is a guess rotateX += deltaX * rotateSpeedFactor; rotateY += deltaY * rotateSpeedFactor;
Edit: Another one to look at is the Skinned Model sample, which implements almost exactly what you are looking for (with keyboard control - arrows rotate, Z/X to zoom).