@Override
 public void input(Window window, MouseInput mouseInput) {
   cameraInc.set(0, 0, 0);
   if (window.isKeyPressed(GLFW_KEY_W)) {
     cameraInc.z = -1;
   } else if (window.isKeyPressed(GLFW_KEY_S)) {
     cameraInc.z = 1;
   }
   if (window.isKeyPressed(GLFW_KEY_A)) {
     cameraInc.x = -1;
   } else if (window.isKeyPressed(GLFW_KEY_D)) {
     cameraInc.x = 1;
   }
   if (window.isKeyPressed(GLFW_KEY_Z)) {
     cameraInc.y = -1;
   } else if (window.isKeyPressed(GLFW_KEY_X)) {
     cameraInc.y = 1;
   }
   if (window.isKeyPressed(GLFW_KEY_LEFT)) {
     angleInc -= 0.05f;
   } else if (window.isKeyPressed(GLFW_KEY_RIGHT)) {
     angleInc += 0.05f;
   } else {
     angleInc = 0;
   }
   if (window.isKeyPressed(GLFW_KEY_SPACE)) {
     monster.nextFrame();
   }
 }
  @Override
  public void init(Window window) throws Exception {
    renderer.init(window);

    scene = new Scene();

    float reflectance = 1f;

    Mesh quadMesh = OBJLoader.loadMesh("/models/plane.obj");
    Material quadMaterial = new Material(new Vector3f(0.0f, 0.0f, 1.0f), reflectance);
    quadMesh.setMaterial(quadMaterial);
    GameItem quadGameItem = new GameItem(quadMesh);
    quadGameItem.setPosition(0, 0, 0);
    quadGameItem.setScale(2.5f);

    // Setup  GameItems
    MD5Model md5Meshodel = MD5Model.parse("/models/monster.md5mesh");
    MD5AnimModel md5AnimModel = MD5AnimModel.parse("/models/monster.md5anim");
    // MD5Model md5Meshodel = MD5Model.parse("/models/boblamp.md5mesh");
    // MD5AnimModel md5AnimModel = MD5AnimModel.parse("/models/boblamp.md5anim");

    monster = MD5Loader.process(md5Meshodel, md5AnimModel, new Vector3f(1, 1, 1));
    monster.setScale(0.05f);
    monster.setRotation(90, 0, 0);

    scene.setGameItems(new GameItem[] {quadGameItem, monster});

    // Setup Lights
    setupLights();

    camera.getPosition().x = 0.25f;
    camera.getPosition().y = 6.5f;
    camera.getPosition().z = 6.5f;
    camera.getRotation().x = 25;
    camera.getRotation().y = -1;
    hud = new Hud("");
  }