Yet another 3d camera question, open space, no friction.

You don’t typically set the view from the camera world directly or you can mess up the projection matrix multiplications CreateWorld is not the same as CreateLookAt even though they seem very similar.

Maybe reading this will help a bit…

Your camera objects matrix is used to create the view matrix.
The view is created typically based on any world object you choose using Matrix.CreateLookAt(…)

To say if your ship is the camera …
You use its world matrix vectors (position forward up) that represents its orientation in the world or worldspace to input to the create look at function in order to create the view matrix which represent camera operation space or view space.

If you want to offset the position of the camera.
Ccopy the object that represents your camera in this case your ship.
Matrix temp = myShip;.
Take the up vector and add it to the position which is the translation vector by some amount.
temp.Translation += myShip.Up * 5f; // by say 5 units.

now you have a world orientation that is just above your ship with the same orientations as your ship.
build the view matrix from it.
Matrix view = Matrix.CreateLookAt(temp.Translation, temp.Translation + temp.Forward, temp.Up);

In order to have your ship and camera roll you need to also allow the up vector of the ship to be able to rotate around the forward axis, this can be done simply with create from axis angle using your current ships forward vector, as the axis to rotate upon. This would be done before the translation previously described.

Maybe this older camera is easier to understand, if the other camera was not. This was a older one that separates the ideas of, the camera world object itself, the controls and the view matrix manipulations, into 3 distinct classes.

But the other class i linked to in your last post actually has a method to accept a target matrix to just use as a camera which is pretty trivial.