private void handleKeyboard() {
        //todo: interpolation - queue movement?
        final float movementSpeed = 1.5f;
        final float runModifier = 2.0f;
        float distance = timer.getDeltaTime() * movementSpeed;

        //unbuffered input
        if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) {
            //Move faster.
            distance *= runModifier;
        }
        if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
            camera.moveForward(distance);
        }
        if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
            camera.moveBackward(distance);
        }
        if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
            camera.moveLeft(distance);
        }
        if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
            camera.moveRight(distance);
        }


        if(Keyboard.next()) {
            if (Keyboard.isKeyDown(Keyboard.KEY_Q)) {
                wireframe = !wireframe;
                GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, (wireframe) ? GL11.GL_LINE : GL11.GL_FILL);
            }
            if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)) {
                Mouse.setGrabbed(!Mouse.isGrabbed());
            }
        }
    }