Here is my attempt.
Begin["esdf`"];
worldwidth = 300;
prmVIEWERHEIGHT = 2.5;
prmMOUSESENS = 0.01;
prmKEYSENS = 2;
pos = {-146.2715891902948`, -154.52068004641723`,
2.5`}(*{0.,-200,prmVIEWERHEIGHT}*);
moveDir = {0.6365371822219685`, 0.7712460149971068`, 0.`}(*{0,1,0}*);
viewDir = moveDir;
strafeDir = {0.7712460149971068`, -0.6365371822219685`, 0.`}(*{1,0,0}*);
cube = {Gray, EdgeForm[None], CapForm[None],
Tube[{{-150, -150, 0}, {-50, 0, 0}, {50, 0, 0}}, 20],
Blue // Lighter,
Translate[
ExampleData[{"Geometry3D", "SpaceShuttle"}, "PolygonObjects"]~
Scale~3, {0, 0, 6}]};
floor = {Texture@ExampleData[{"ColorTexture", "GreenMarble"}],
EdgeForm@None,
Polygon[{{-w, -w, 0}, {-w, w, 0}, {w, w, 0}, {w, -w, 0}},
VertexTextureCoordinates -> {{0, 0}, {1, 0}, {1, 1}, {0,
1}}]} /. w -> worldwidth;
rotTrans := Function[x, Evaluate[RotationTransform[x, {0., 0., 1.}]]];
mp0 = MousePosition[];
mouse := (mousePos = MousePosition[];
{mouseDx, mouseDy} = mousePos - mp0;
mp0 = mousePos;
viewDir =
RotationTransform[-prmMOUSESENS mouseDy, strafeDir]@viewDir;
{moveDir, strafeDir, viewDir} =
rotTrans[-prmMOUSESENS mouseDx] /@ {moveDir, strafeDir, viewDir};);
keys := Switch[CurrentValue["EventKey"], ".",
pos += prmKEYSENS moveDir, "e", pos -= prmKEYSENS moveDir, "o",
pos -= prmKEYSENS strafeDir, "i", pos += prmKEYSENS strafeDir];
actions = {"MouseMoved" :> mouse, "KeyDown" :> keys};
SetOptions[
CreateDocument[{Dynamic@
EventHandler[
Style[Graphics3D[{{Gray, EdgeForm@None, CapForm@None,
Tube[{{-150, -150, 0}, {-50, 0, 0}, {50, 0, 0}}, 20],
Blue // Lighter,
Translate[
ExampleData[{"Geometry3D", "SpaceShuttle"},
"PolygonObjects"]~Scale~3, {0, 0, 6}]}, floor},
ViewVector -> {pos, pos + viewDir}, ViewRange -> {0.1, 300},
Lighting -> "Neutral", Boxed -> False, ImageSize -> Full,
Background -> LightBlue, PlotRangePadding -> 0],
Selectable -> False, Editable -> False], actions]},
CellMargins -> 0, ShowCellBracket -> False,
"TrackCellChangeTimes" -> False, WindowElements -> {},
WindowFrame -> "Normal", WindowMargins -> Automatic],
NotebookEventActions -> actions];
End[];