public ParallaxMapping() throws Exception {
		Config.maxPolysVisible = 1000;
		Config.lightMul = 1;
		Config.glTrilinear = true;
		Config.glUseVBO = true;

		world = new World();

		TextureManager tm = TextureManager.getInstance();

		Texture face = new Texture("data/face.png");
		Texture normals = new Texture("data/face_norm.png", true);
		Texture height = new Texture("data/face_height2.png");
		plane = Primitives.getPlane(1, 100);

		TexelGrabber grabber = new TexelGrabber();
		height.setEffect(grabber);
		height.applyEffect();
		int[] heighties = grabber.getAlpha();

		AlphaMerger setter = new AlphaMerger(heighties);
		normals.setEffect(setter);
		normals.applyEffect();

		tm.addTexture("face", face);
		tm.addTexture("normals", normals);

		TextureInfo ti = new TextureInfo(TextureManager.getInstance().getTextureID("face"));
		ti.add(TextureManager.getInstance().getTextureID("normals"), TextureInfo.MODE_BLEND);

		plane.setTexture(ti);

		shader = new GLSLShader(Loader.loadTextFile("data/vertexshader_offset.glsl"), Loader.loadTextFile("data/fragmentshader_offset.glsl"));
		plane.setRenderHook(shader);
		plane.setSpecularLighting(true);
		shader.setStaticUniform("invRadius", 0.0003f);
		shader.setStaticUniform("textureUnit0", 0);
		shader.setStaticUniform("textureUnit1", 1);

		plane.build();
		plane.compile();
		plane.strip();

		world.addObject(plane);

		light = new Light(world);
		light.enable();

		light.setIntensity(60, 50, 50);
		light.setPosition(SimpleVector.create(-10, -50, -100));

		world.setAmbientLight(10, 10, 10);

		Camera cam = world.getCamera();
		cam.moveCamera(Camera.CAMERA_MOVEOUT, 120);
		cam.lookAt(plane.getTransformedCenter());
	}