Though I'm pretty satisfied with the result there are some issues here which require tweaking.

Since mouse offset events are implemented using MousePosition it is quite easy to get mouse look stucked (e.g. when you try to turn around). This happens when hidden mouse cursor hits screen borders. So, how to correctly handle mouse offset events?

It is impossible to move diagonally because KeyDown events do not handle simultaneous keystrokes. Can something be done with this?

The duplication of event handlers at the end (SetOptions[nb, NotebookEventActions -> actions]) does not seem logical to me, but without it KeyDown events do not work. Why?

hideMouse hack is what I discussed here. Unfortunately the elegant construction MouseAppearance[expr, Spacer[0]]proposed by Mike does not work on v. 8.0.4 and WinXP and Win7.

Next up: "How do I implement Quake 3 in Mathematica?" =)
–
The Toad♦Jan 11 '13 at 1:50

+1 This is awesome. How might your function for other 3DGraphics for example to something like the following example? Graphics3D[{ Cylinder[], Sphere[{0, 0, 2}], Line[{{-2, 0, 2}, {2, 0, 2}, {0, 0, 4}, {-2, 0, 2}}], Yellow, Cuboid[{-2, -2, -2}, {2, 2, -1}], }] For example would it be easy to create a function of the form wasd[gr_]. I thinking of starting such a question.
–
WilliamSep 14 '14 at 3:39

Mathematica is a registered trademark of Wolfram Research, Inc. While the mark is used herein with the limited permission of Wolfram Research, Stack Exchange and this site disclaim all affiliation therewith.