ok i made some small changes, but this code does what u want. u can rotate the cam, u can move it backward and forward.
since i dont have ur missionone file, so i commented out the terrain part and create my own terrain. but u can change that back.
have fune~ 
package test;
import java.net.URL;
import javax.swing.ImageIcon;
import com.jme.animation.SpatialTransformer;
import com.jme.app.BaseGame;
import com.jme.bounding.BoundingBox;
import com.jme.image.Texture;
import com.jme.input.AbsoluteMouse;
import com.jme.input.FirstPersonHandler;
import com.jme.input.InputHandler;
import com.jme.input.InputSystem;
import com.jme.input.KeyBindingManager;
import com.jme.input.KeyInput;
import com.jme.intersection.PickResults;
import com.jme.math.FastMath;
import com.jme.math.Quaternion;
import com.jme.math.Vector3f;
import com.jme.renderer.Camera;
import com.jme.renderer.ColorRGBA;
import com.jme.scene.CameraNode;
import com.jme.scene.Node;
import com.jme.scene.shape.Box;
import com.jme.scene.shape.Sphere;
import com.jme.scene.state.TextureState;
import com.jme.system.DisplaySystem;
import com.jme.system.JmeException;
import com.jme.util.TextureManager;
import com.jme.util.Timer;
import com.jmex.terrain.TerrainBlock;
import com.jmex.terrain.TerrainPage;
import com.jmex.terrain.util.HillHeightMap;
import com.jmex.terrain.util.ImageBasedHeightMap;
import com.jmex.terrain.util.ProceduralTextureGenerator;
public class Testowy extends BaseGame {
int lookAt = 0;
private Vector3f loc = new Vector3f(0.0f, 0.0f, 25.0f);
private Vector3f left = new Vector3f(-1.0f, 0.0f, 0.0f);
private Vector3f up = new Vector3f(0.0f, 1.0f, 0.0f);
private Vector3f dir = new Vector3f(0.0f, 0.0f, -1.0f);
float moveX = 0.0f;
float moveY = 0.0f;
float moveZ = 0.0f;
Vector3f CameraLoc = new Vector3f(moveX, moveY, moveZ);
Node node = new Node("holder");
CameraNode cn;
TerrainBlock tb;
protected Timer timer;
//Our camera object for viewing the scene
private Camera cam;
//the root node of the scene graph
private Node scene;
//display attributes for the window. We will keep these values
//to allow the user to change them
private int width, height, depth, freq;
private boolean fullscreen;
/*** Main entry point of the application */
public static void main(String[] args) {
Testowy app = new Testowy();
//We will load our own "fantastic" Flag Rush logo. Yes, I'm an artist.
app.setDialogBehaviour(ALWAYS_SHOW_PROPS_DIALOG, Testowy.class.getClassLoader()
.getResource("jmetest/data/images/FlagRush.png"));
app.start();
}
/** During an update we only look for the escape button and update the timer
* to get the framerate. */
protected void update(float interpolation) {
//update the time to get the framerate
timer.update();
interpolation = timer.getTimePerFrame();
scene.updateGeometricState(interpolation,true);
cn.updateGeometricState(interpolation,true);
if (KeyBindingManager.getKeyBindingManager().isValidCommand("exit")) {
finished = true;
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("left")) {
camLeft();
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("right")) {
camRight();
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("forward")) {
camForward();
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("back")) {
camBack();
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("up")) {
camUp();
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("down")) {
camDown();
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("rotateLeft")) {
rotateLeft();
}
if (KeyBindingManager.getKeyBindingManager().isValidCommand("rotateRight")) {
rotateRight();
}
}
/******************* draws the scene graph *********************************/
protected void render(float interpolation) {
//Clear the screen
display.getRenderer().clearBuffers();
display.getRenderer().draw(scene);
}
/******************** initializes the display and camera. *******************/
protected void initSystem() {
//store the properties information
width = properties.getWidth();
height = properties.getHeight();
depth = properties.getDepth();
freq = properties.getFreq();
fullscreen = properties.getFullscreen();
timer = Timer.getTimer(); /** Get a high resolution timer for FPS updates. */
try {
display = DisplaySystem.getDisplaySystem(properties.getRenderer());
display.createWindow(width, height, depth, freq, fullscreen);
cam = display.getRenderer().createCamera(width, height);
} catch (JmeException e) {
e.printStackTrace();
System.exit(1);
}
//set the background to black
display.getRenderer().setBackgroundColor(ColorRGBA.black);
InitCamera();
display.getRenderer().setCamera(cam);
checkInput();
}
/******************* initializes the scene ****************** */
protected void initGame() {
scene = new Node("Scene graph node");
addBox();
LoadingTerrain();
InitCameraNode();
//update the scene graph for rendering
scene.updateGeometricState(0.0f, true);
scene.updateRenderState();
}
/** **************************************************************/
protected void reinit() {
display.recreateWindow(width, height, depth, freq, fullscreen);
}
/** **************************************************************/
protected void cleanup() {
//ts.deleteAll();
}
/** **************************************************************/
private void LoadingTerrain() {
/*URL MapaTerenu=MissionOne.class.getClassLoader().getResource("mission/concrete.jpg");
URL Trawa=MissionOne.class.getClassLoader().getResource("mission/grass.jpg");
URL Kamien=MissionOne.class.getClassLoader().getResource("mission/skala.jpg");
ImageBasedHeightMap ib=new ImageBasedHeightMap(
new ImageIcon(MapaTerenu).getImage()
);
tb=new TerrainBlock("image icon",ib.getSize(),
new Vector3f(1.0f,.05f,1.0f),ib.getHeightMap(),
new Vector3f(0,0,0),false);
ProceduralTextureGenerator pg=new ProceduralTextureGenerator(ib);
pg.addTexture(new ImageIcon(Trawa),0,0,60);
pg.addTexture(new ImageIcon(Kamien),40,256,256);
pg.createTexture(256);
TextureState ts=display.getRenderer().createTextureState();
ts.setTexture(
TextureManager.loadTexture(
pg.getImageIcon().getImage(),
Texture.MM_LINEAR_LINEAR,
Texture.FM_LINEAR,
true
)
);
tb.setRenderState(ts);
tb.setModelBound(new BoundingBox());
tb.updateModelBound();
tb.setLocalTranslation(new Vector3f(0,0,0));
lookAt = ib.getSize()/2;
scene.attachChild(tb);*/
HillHeightMap heightMap = new HillHeightMap(129, 2000, 5.0f, 20.0f,
(byte) 2);
heightMap.setHeightScale(0.001f);
Vector3f terrainScale = new Vector3f(10, 1, 10);
TerrainPage terrain = new TerrainPage("Terrain", 33, heightMap
.getSize(), terrainScale, heightMap.getHeightMap(), false);
terrain.setDetailTexture(1, 16);
scene.attachChild(terrain);
}
/** **************************************************************/
private void InitCamera() {
cam = display.getRenderer().createCamera(
display.getWidth(),
display.getHeight());
cam.setFrustumPerspective(45.0f,
(float) display.getWidth() /
(float) display.getHeight(), 1, 1000);
// Move our camera to a correct place and orientation.
cam.setFrame(loc, left, up, dir);
cam.update();
}
/** **************************************************************/
private void InitCameraNode() {
cn = new CameraNode("Camera Node", cam);
node.attachChild(cn);
node.setLocalTranslation(new Vector3f(0, 0, 0));
cn.updateWorldData(0);
scene.attachChild(node);
}
/** **************************************************************/
private void checkInput() {
KeyBindingManager.getKeyBindingManager().set("exit",
KeyInput.KEY_ESCAPE);
KeyBindingManager.getKeyBindingManager().set("forward",
KeyInput.KEY_W);
KeyBindingManager.getKeyBindingManager().set("back",
KeyInput.KEY_S);
KeyBindingManager.getKeyBindingManager().set("right",
KeyInput.KEY_D);
KeyBindingManager.getKeyBindingManager().set("left",
KeyInput.KEY_A);
KeyBindingManager.getKeyBindingManager().set("up",
KeyInput.KEY_R);
KeyBindingManager.getKeyBindingManager().set("down",
KeyInput.KEY_F);
KeyBindingManager.getKeyBindingManager().set("rotateLeft",
KeyInput.KEY_Q);
KeyBindingManager.getKeyBindingManager().set("rotateRight",
KeyInput.KEY_E);
}
/** **************************************************************/
private void addBox() {
Box b2=new Box("Blarg2",new Vector3f(-.5f,-.5f,-20.5f),new Vector3f(.5f,.5f,-19.5f));
b2.setModelBound(new BoundingBox());
b2.updateModelBound();
scene.attachChild(b2);
}
/** **************************************************************/
private void camDown() {
Vector3f change = new Vector3f(0.0f, -0.1f, 0.0f);
node.getLocalTranslation().addLocal(change);
cam.update();
}
private void camUp() {
Vector3f change = new Vector3f(0.0f, 0.1f, 0.0f);
node.getLocalTranslation().addLocal(change);
cam.update();
}
private void camBack() {
Vector3f change = new Vector3f(0.0f, 0.0f, -0.1f);
node.getLocalTranslation().addLocal(change);
cam.update();
}
private void camForward() {
Vector3f change = new Vector3f(0.0f, 0.0f, 0.1f);
node.getLocalTranslation().addLocal(change);
cam.update();
}
private void camRight() {
Vector3f change = new Vector3f(-0.1f, 0.0f, 0.0f);
node.getLocalTranslation().addLocal(change);
cam.update();
}
private void camLeft() {
Vector3f change = new Vector3f(0.1f, 0.0f, 0.0f);
node.getLocalTranslation().addLocal(change);
cam.update();
}
private void rotateLeft() {
Quaternion x90 = new Quaternion();
x90.fromAngleAxis(FastMath.DEG_TO_RAD*90,new Vector3f(0,1,0));
node.setLocalRotation( x90 );
}
private void rotateRight() {
Quaternion x270 = new Quaternion();
x270.fromAngleAxis(FastMath.DEG_TO_RAD*270,new Vector3f(0,1,0));
node.setLocalRotation( x270 );
}
}