The thing that the "activeden" demo does is trivially easy - however, it does not (and cannot) do what PC-based FPS's do with the mouse. You can pan across the field of bubbles for a while - but when you reach the edge of the screen - you can't turn any further in that direction. It's using the rate of change of position of the mouse like an FPS does - but because it can't reset the cursor to the middle of the window - you keep running out of screen.

There is no doubt that you could implement a scheme that panned or tilted the camera by an amount that's proportional to the distance from the center of the window - but that leaves you with the "running out of screen" problem.

You could get around that by moving the camera at an angular velocity that's proportional to that distance of the mouse from the center. When the mouse is in the middle of the window - the camera stays still - the more you move the mouse away from the center, the faster the camera moves. This certainly gets around the "running out of screen" problem.

But the problem with that (trust me - I've tried it) is that it's hard for the player to stop the camera exactly where he wants it to be because it's not clear where the "center" of the screen is. You can't find the "null point" easily enough when the action gets hot. This problem is 100 times worse in a classic FPS where the mouse controls not just the camera - but also the direction you're moving in. With a velocity-control system, you just can't get yourself pointed in the right direction reliably enough and you wind up lurching around like a drunkard!

However, in a console-based game, that's exactly how the joystick works. The further the joystick is moved away from the center, the faster the camera turns. But the only reason that works well is because joysticks have a physical spring that returns them to the center position when you release them. So you can stop moving at any time by just letting go of the joystick.

The mouse doesn't have that - so in conventional FPS's, you have to rely on RELATIVE mouse movement - not on it's absolute position. That means that when you stop moving the mouse, the relative motion goes to zero automatically and the camera stops moving - which is like releasing the joystick and letting the spring recenter it.

In effect, you're mapping the velocity of the mouse to the velocity of the camera...or (if you prefer) the position of the mouse to the position of the camera...but that's the problem. If you use the position of the mouse - then you're limited to positions that lie inside the browser window...and now you can't keep on spinning the camera around without "running out of screen".

So the mouse is basically a bust...we can't map mouse position onto camera velocity and we can't map mouse position onto camera position either.

Using the keyboard arrows has some of the same properties as a joystick or relative-mouse-movement system - when you release the keys, you're returned to the "null" position. In a sense, your finger pressure on the key maps to camera velocity - and releasing your finger makes that go instantly to zero.

But the trouble with keyboards is that they aren't proportional devices - a key is either down or it's not - so camera speed becomes a binary property. You can't control the speed at which you move the camera. Either it's too fast and the world swirls past dizzingly while you're looking carefully for something in your visual field - or it's too slow for a 'quick look' to your right or left and you feel like your head is stuck in treacle!

But it's worse even than that. Doing even that little with the keyboard is a nightmare because of N-key rollover issues. Most PC keyboard hardware can't reliably detect more than two keys held down at the same time...unless those keys are selected very carefully - AND with a knowledge of the underlying keyboard switching matrix that varies from one keyboard to another in ways that are impossible to detect automatically.

Try this...hold down any two keys and start pressing other keys nearby...pretty soon you'll find that some don't register. On my beloved GoldTouch keyboard, if I hold down (say) 'A' and 'C' then the 'S' and 'F' keys still work - but the 'D' key doesn't. But on my Dell Laptop, 'D' works just fine but 'F' doesn't! That's a hardware restriction - and it's very difficult to work-around because there are a bunch of different keyboard controllers out there in the world, and you can't query which you have - and they aren't compatible.

This makes two-handed keyboard play decidedly problematic. If someone is using W,A,S,D to move around and other keys to drive camera motion - then they will interfere with each other and you'll find that if you (say) try to move diagonally by holding down W and D together - that suddenly some other random key will stop working and maybe you can't jump anymore!

So this is rather a fundamental problem.

In an ideal world, we'd be able to stick an analog joystick onto every phone and keyboard or issue game-pad controllers to everyone who plays an online game...but that's not the kind of thing that can happen overnight. Worse still, the world is leaping forward in the direction of touch-screens - and that makes things MUCH worse because it eliminates even the possibility of repositioning the cursor!

If online 3D gaming truly takes off on the PC - then I think we should expect to see the return of the USB gamepad. With people playing games on iPad's and the like, they aren't going to want to have their fingers covering up the action - so the touch screen is a non-solution as an input device...so there is a problem there too.

Using tilt sensors in cameras and pads has a similar problem to the mouse - you have to map tilt angle onto camera velocity - and finding that null position is like balancing a ball on a book!

For 3rd person games, I think the answer is fairly clear - position the mouse (or your finger) on top of your avatar to stand still - move it further away in the direction you want to move to start the guy walking - the larger the distance, the faster he moves. We're using mouse position to control avatar/camera speed...but because your avatar is a focal point for your attention, it's easy to see how to stop the motion. It's not ideal - but it does work. Another nice thing about 3rd person games is that camera control is MUCH less critical. In an FPS, you need the two-handed style where one hand is on the mouse - controlling the camera and the direction you're walking in - the other controlling the speed of movement and allowing you to step sideways and backwards.