Diary of a game development in XNA. Smallest milestones and features of the game will be revealed and discussed. Get ready! ;)

Wednesday, August 11, 2010

"Flying spectator" camera

Here we are, let's get started!

My first though was that whatever I want to start with and get displayed on my screen as first I definitely want to examine it properly.

To make it happen I want to create a camera that can fly around in world space.

The camera is implemented as a Microsoft.Xna.Framework.GameComponentto encapsulate camera logic as much as possible and create as little dependency between classes (currently between cam class and the main game class) as possible. I defined an ICamera interface, created an implementation for it and added the implementation into GameServiceContainer. My main game class gets the ICamera service without being aware of the implementation (i.e. the current active camera). The ICamera has getters to access view and projection matrices and directions like: up, forward, right — corresponding camera directions.

With my current implementation I want to be able to fly around in the scene. To achieve it following happens:

cam inits itself with

cam position (0, 0, 10) (somewhere on z-axis)

target position (0, 0, 0)

up direction (0, 1, 0)

when mouse is moved horizontally then

up and forward directions of the cam are rotated around y-axis (of word's coordinate system)

when mouse is moved vertically then

up and forward directions of the cam are rotated around "right"direction (of the cam)

when one of the move or elevate buttons (e.g. w, s, a, d, q, e) are pressed then simply both position and target of the camera are moved in matching camera directions: up, forward or right.

See it in action on the video.

Note: two dummy triangles were rendered in a fixed world position to have the feeling that our camera is moving.