@Override public void addLight (PointLight point, Set<CubemapSide> sides) { PointLightProperties plProperty = new PointLightProperties(); for (int i = 0; i < 6; i++) { CubemapSide cubemapSide = Cubemap.CubemapSide.values()[i]; if (sides.contains(cubemapSide)) { PerspectiveCamera camera = new PerspectiveCamera(90, 0, 0); camera.position.set(point.position); camera.direction.set(cubemapSide.direction); camera.up.set(cubemapSide.up); camera.near = 1; camera.far = 100; LightProperties p = new LightProperties(camera); plProperty.properties.put(cubemapSide, p); } } pointCameras.put(point, plProperty); }
@Override protected void attachFrameBufferColorTexture (Cubemap texture) { GL20 gl = Gdx.gl20; int glHandle = texture.getTextureObjectHandle(); Cubemap.CubemapSide[] sides = Cubemap.CubemapSide.values(); for (Cubemap.CubemapSide side : sides) { gl.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, GL20.GL_COLOR_ATTACHMENT0, side.glEnum, glHandle, 0); } }
public void renderScene() { Gdx.gl.glViewport(0, 0, Gdx.graphics.getBackBufferWidth(), Gdx.graphics.getBackBufferHeight()); Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST); // Render scene to screen super.render(); // Render scene to cubemap camFb.position.set(cam.position); camFb.near = cam.near; camFb.far = cam.far; fb.begin(); while( fb.nextSide() ) { fb.getSide().getUp(camFb.up); fb.getSide().getDirection(camFb.direction); camFb.update(); Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); modelBatch.begin(camFb); for (ModelInstance instance : instances) modelBatch.render(instance, lights); if (space != null) modelBatch.render(space); modelBatch.end(); } fb.end(); }
protected LightProperties nextPoint () { if (!pointCameraIterator.hasNext() && currentPointSide > 5) return null; if (currentPointSide > 5) currentPointSide = 0; if (currentPointSide == 0) { ObjectMap.Entry<PointLight, PointLightProperties> e = pointCameraIterator.next(); currentLight = e.key; currentPointProperties = e.value; } if (currentPointProperties.properties.containsKey(Cubemap.CubemapSide.values()[currentPointSide])) { LightProperties lp = currentPointProperties.properties.get(Cubemap.CubemapSide.values()[currentPointSide]); currentLightProperties = lp; currentPointSide += 1; if (!lightFilter.filter(pointCameras.findKey(currentPointProperties, true), lp.camera, this.camera)) { return nextPoint(); } processViewport(lp, true); return lp; } currentPointSide += 1; return nextPoint(); }
@Override protected void attachFrameBufferColorTexture (Cubemap texture) { GL20 gl = Gdx.gl20; int glHandle = texture.getTextureObjectHandle(); Cubemap.CubemapSide[] sides = Cubemap.CubemapSide.values(); for (Cubemap.CubemapSide side : sides) { gl.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, GL20.GL_COLOR_ATTACHMENT0, side.glEnum, glHandle, 0); } }
@Override protected void attachFrameBufferColorTexture (Cubemap texture) { GL20 gl = Gdx.gl20; int glHandle = texture.getTextureObjectHandle(); Cubemap.CubemapSide[] sides = Cubemap.CubemapSide.values(); for (Cubemap.CubemapSide side : sides) { gl.glFramebufferTexture2D(GL20.GL_FRAMEBUFFER, GL20.GL_COLOR_ATTACHMENT0, side.glEnum, glHandle, 0); } }