@Override public void init(Window window) throws Exception { renderer.init(window); scene = new Scene(); float skyBoxScale = 50.0f; float terrainScale = 10; //int terrainSize = 3; int terrainSize = 3; float minY = -0.1f; float maxY = 0.1f; int textInc = 40; terrain = new Terrain(terrainSize, terrainScale, minY, maxY, "/textures/heightmap.png", "/textures/terrain.png", textInc); scene.setGameItems(terrain.getGameItems()); scene.setFog(new Fog(true, new Vector3f(0.5f, 0.5f, 0.5f), 0.15f)); // Setup SkyBox SkyBox skyBox = new SkyBox("/models/skybox.obj", "/textures/skybox.png"); skyBox.setScale(skyBoxScale); scene.setSkyBox(skyBox); // Setup Lights setupLights(); // Create HUD hud = new Hud("DEMO"); camera.getPosition().x = 0.0f; camera.getPosition().y = 5.0f; camera.getPosition().z = 0.0f; camera.getRotation().x = 90; }
private void renderSkyBox(Window window, Camera camera, Scene scene) { skyBoxShaderProgram.bind(); skyBoxShaderProgram.setUniform("texture_sampler", 0); Matrix4f projectionMatrix = transformation.getProjectionMatrix(); skyBoxShaderProgram.setUniform("projectionMatrix", projectionMatrix); SkyBox skyBox = scene.getSkyBox(); Matrix4f viewMatrix = transformation.getViewMatrix(); viewMatrix.m30(0); viewMatrix.m31(0); viewMatrix.m32(0); Matrix4f modelViewMatrix = transformation.buildModelViewMatrix(skyBox, viewMatrix); skyBoxShaderProgram.setUniform("modelViewMatrix", modelViewMatrix); skyBoxShaderProgram.setUniform("ambientLight", scene.getSceneLight().getSkyBoxLight()); scene.getSkyBox().getMesh().render(); skyBoxShaderProgram.unbind(); }
public void renderScene(Window window, Camera camera, Scene scene) { sceneShaderProgram.bind(); Matrix4f projectionMatrix = transformation.getProjectionMatrix(); sceneShaderProgram.setUniform("projectionMatrix", projectionMatrix); Matrix4f viewMatrix = transformation.getViewMatrix(); SceneLight sceneLight = scene.getSceneLight(); renderLights(viewMatrix, sceneLight); sceneShaderProgram.setUniform("texture_sampler", 0); sceneShaderProgram.setUniform("fog", scene.getFog()); // Render each mesh with the associated game Items Map<Mesh, List<GameItem>> mapMeshes = scene.getGameMeshes(); for (Mesh mesh : mapMeshes.keySet()) { sceneShaderProgram.setUniform("material", mesh.getMaterial()); mesh.renderList(mapMeshes.get(mesh), (GameItem gameItem) -> { Matrix4f modelViewMatrix = transformation.buildModelViewMatrix(gameItem, viewMatrix); sceneShaderProgram.setUniform("modelViewMatrix", modelViewMatrix); } ); } sceneShaderProgram.unbind(); }
@Override public void init(Window window) throws Exception { renderer.init(window); scene = new Scene(); float skyBoxScale = 50.0f; float terrainScale = 10; //int terrainSize = 3; int terrainSize = 3; float minY = -0.1f; float maxY = 0.1f; int textInc = 40; terrain = new Terrain(terrainSize, terrainScale, minY, maxY, "/textures/heightmap.png", "/textures/terrain.png", textInc); //terrain = new Terrain(terrainSize, terrainScale, minY, maxY, "/textures/heightmap_test.png", "/textures/terrain.png", textInc); scene.setGameItems(terrain.getGameItems()); // Setup SkyBox SkyBox skyBox = new SkyBox("/models/skybox.obj", "/textures/skybox.png"); skyBox.setScale(skyBoxScale); scene.setSkyBox(skyBox); // Setup Lights setupLights(); // Create HUD hud = new Hud("DEMO"); camera.getPosition().x = 0.0f; camera.getPosition().y = 5.0f; camera.getPosition().z = 0.0f; camera.getRotation().x = 90; }
public void renderScene(Window window, Camera camera, Scene scene) { sceneShaderProgram.bind(); Matrix4f projectionMatrix = window.getProjectionMatrix(); sceneShaderProgram.setUniform("projectionMatrix", projectionMatrix); Matrix4f orthoProjMatrix = transformation.getOrthoProjectionMatrix(); sceneShaderProgram.setUniform("orthoProjectionMatrix", orthoProjMatrix); Matrix4f lightViewMatrix = transformation.getLightViewMatrix(); Matrix4f viewMatrix = camera.getViewMatrix(); SceneLight sceneLight = scene.getSceneLight(); renderLights(viewMatrix, sceneLight); sceneShaderProgram.setUniform("fog", scene.getFog()); sceneShaderProgram.setUniform("texture_sampler", 0); sceneShaderProgram.setUniform("normalMap", 1); sceneShaderProgram.setUniform("shadowMap", 2); sceneShaderProgram.setUniform("renderShadow", scene.isRenderShadows() ? 1 : 0); renderNonInstancedMeshes(scene, sceneShaderProgram, viewMatrix, lightViewMatrix); renderInstancedMeshes(scene, sceneShaderProgram, viewMatrix, lightViewMatrix); sceneShaderProgram.unbind(); }
@Override public void init(Window window) throws Exception { renderer.init(window); scene = new Scene(); // Setup GameItems float reflectance = 1f; Mesh cubeMesh = OBJLoader.loadMesh("/models/cube.obj"); Material cubeMaterial = new Material(new Vector4f(0, 1, 0, 1), reflectance); cubeMesh.setMaterial(cubeMaterial); cubeGameItem = new GameItem(cubeMesh); cubeGameItem.setPosition(0, 0, 0); cubeGameItem.setScale(0.5f); Mesh quadMesh = OBJLoader.loadMesh("/models/plane.obj"); Material quadMaterial = new Material(new Vector4f(0.0f, 0.0f, 1.0f, 1.0f), reflectance); quadMesh.setMaterial(quadMaterial); GameItem quadGameItem = new GameItem(quadMesh); quadGameItem.setPosition(0, -1, 0); quadGameItem.setScale(2.5f); scene.setGameItems(new GameItem[]{cubeGameItem, quadGameItem}); // Setup Lights setupLights(); camera.getPosition().z = 2; hud = new Hud(""); }
private void setupLights() { SceneLight sceneLight = new SceneLight(); scene.setSceneLight(sceneLight); // Ambient Light sceneLight.setAmbientLight(new Vector3f(1.0f, 1.0f, 1.0f)); // Directional Light float lightIntensity = 1.0f; Vector3f lightPosition = new Vector3f(-1, 0, 0); sceneLight.setDirectionalLight(new DirectionalLight(new Vector3f(1, 1, 1), lightPosition, lightIntensity)); }
renderer.init(window); scene = new Scene(); quadGameItem.setScale(2.5f); scene.setGameItems(new GameItem[] { quadGameItem} ); particleEmitter.setPositionRndRange(range); particleEmitter.setSpeedRndRange(range); this.scene.setParticleEmitters(new FlowParticleEmitter[] {particleEmitter});
public void render(Window window, Camera camera, Scene scene, boolean sceneChanged) { clear(); if (window.getOptions().frustumCulling) { frustumFilter.updateFrustum(window.getProjectionMatrix(), camera.getViewMatrix()); frustumFilter.filter(scene.getGameMeshes()); frustumFilter.filter(scene.getGameInstancedMeshes()); } // Render depth map before view ports has been set up if (scene.isRenderShadows() && sceneChanged) { shadowRenderer.render(window, scene, camera, transformation, this); } glViewport(0, 0, window.getWidth(), window.getHeight()); // Update projection matrix once per render cycle window.updateProjectionMatrix(); renderScene(window, camera, scene); renderSkyBox(window, camera, scene); renderParticles(window, camera, scene); //renderAxes(camera); //renderCrossHair(window); }
@Override public void cleanup() { renderer.cleanup(); scene.cleanup(); } }
public void renderScene(Window window, Camera camera, Scene scene) { sceneShaderProgram.bind(); Matrix4f projectionMatrix = transformation.getProjectionMatrix(); sceneShaderProgram.setUniform("projectionMatrix", projectionMatrix); Matrix4f viewMatrix = transformation.getViewMatrix(); SceneLight sceneLight = scene.getSceneLight(); renderLights(viewMatrix, sceneLight); sceneShaderProgram.setUniform("texture_sampler", 0); // Render each mesh with the associated game Items Map<Mesh, List<GameItem>> mapMeshes = scene.getGameMeshes(); for (Mesh mesh : mapMeshes.keySet()) { sceneShaderProgram.setUniform("material", mesh.getMaterial()); mesh.renderList(mapMeshes.get(mesh), (GameItem gameItem) -> { Matrix4f modelViewMatrix = transformation.buildModelViewMatrix(gameItem, viewMatrix); sceneShaderProgram.setUniform("modelViewMatrix", modelViewMatrix); } ); } sceneShaderProgram.unbind(); }
private void renderFog(Window window, Camera camera, Scene scene) { fogShaderProgram.bind(); Matrix4f viewMatrix = camera.getViewMatrix(); Matrix4f projectionMatrix = window.getProjectionMatrix(); fogShaderProgram.setUniform("modelMatrix", bufferPassModelMatrix); fogShaderProgram.setUniform("viewMatrix", viewMatrix); fogShaderProgram.setUniform("projectionMatrix", projectionMatrix); // Bind the scene buffer texture and the the depth texture of the G-Buffer glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, gBuffer.getPositionTexture()); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, gBuffer.getDepthTexture()); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, sceneBuffer.getTextureId()); fogShaderProgram.setUniform("positionsText", 0); fogShaderProgram.setUniform("depthText", 1); fogShaderProgram.setUniform("sceneText", 2); fogShaderProgram.setUniform("screenSize", (float) gBuffer.getWidth(), (float)gBuffer.getHeight()); fogShaderProgram.setUniform("fog", scene.getFog()); SceneLight sceneLight = scene.getSceneLight(); fogShaderProgram.setUniform("ambientLight", sceneLight.getAmbientLight()); DirectionalLight dirLight = sceneLight.getDirectionalLight(); fogShaderProgram.setUniform("lightColour", dirLight.getColor()); fogShaderProgram.setUniform("lightIntensity", dirLight.getIntensity()); bufferPassMesh.render(); fogShaderProgram.unbind(); }
@Override public void cleanup() { renderer.cleanup(); Map<Mesh, List<GameItem>> mapMeshes = scene.getGameMeshes(); for (Mesh mesh : mapMeshes.keySet()) { mesh.cleanUp(); } hud.cleanup(); }
public void render(Window window, Camera camera, Scene scene) { clear(); frustumFilter.updateFrustum(window.getProjectionMatrix(), camera.getViewMatrix()); frustumFilter.filter(scene.getGameMeshes()); frustumFilter.filter(scene.getGameInstancedMeshes()); // Render depth map before view ports has been set up renderDepthMap(window, camera, scene); glViewport(0, 0, window.getWidth(), window.getHeight()); // Update projection matrix once per render cycle window.updateProjectionMatrix(); renderScene(window, camera, scene); renderSkyBox(window, camera, scene); renderParticles(window, camera, scene); //renderAxes(camera); renderCrossHair(window); }
private void update(Window window, Matrix4f viewMatrix, Scene scene) { SceneLight sceneLight = scene.getSceneLight(); DirectionalLight directionalLight = sceneLight != null ? sceneLight.getDirectionalLight() : null; for (int i = 0; i < NUM_CASCADES; i++) { ShadowCascade shadowCascade = shadowCascades.get(i); shadowCascade.update(window, viewMatrix, directionalLight); } }
private void renderParticles(Window window, Camera camera, Scene scene) { particlesShaderProgram.bind(); particlesShaderProgram.setUniform("texture_sampler", 0); Matrix4f projectionMatrix = window.getProjectionMatrix(); particlesShaderProgram.setUniform("projectionMatrix", projectionMatrix); Matrix4f viewMatrix = camera.getViewMatrix(); IParticleEmitter[] emitters = scene.getParticleEmitters(); int numEmitters = emitters != null ? emitters.length : 0; glDepthMask(false); glBlendFunc(GL_SRC_ALPHA, GL_ONE); for (int i = 0; i < numEmitters; i++) { IParticleEmitter emitter = emitters[i]; InstancedMesh mesh = (InstancedMesh) emitter.getBaseParticle().getMesh(); Texture text = mesh.getMaterial().getTexture(); particlesShaderProgram.setUniform("numCols", text.getNumCols()); particlesShaderProgram.setUniform("numRows", text.getNumRows()); mesh.renderListInstanced(emitter.getParticles(), true, transformation, viewMatrix, null); } glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDepthMask(true); particlesShaderProgram.unbind(); }
public void renderScene(Window window, Camera camera, Scene scene) { sceneShaderProgram.bind(); Matrix4f projectionMatrix = window.getProjectionMatrix(); sceneShaderProgram.setUniform("projectionMatrix", projectionMatrix); Matrix4f orthoProjMatrix = transformation.getOrthoProjectionMatrix(); sceneShaderProgram.setUniform("orthoProjectionMatrix", orthoProjMatrix); Matrix4f lightViewMatrix = transformation.getLightViewMatrix(); Matrix4f viewMatrix = camera.getViewMatrix(); SceneLight sceneLight = scene.getSceneLight(); renderLights(viewMatrix, sceneLight); sceneShaderProgram.setUniform("fog", scene.getFog()); sceneShaderProgram.setUniform("texture_sampler", 0); sceneShaderProgram.setUniform("normalMap", 1); sceneShaderProgram.setUniform("shadowMap", 2); sceneShaderProgram.setUniform("renderShadow", scene.isRenderShadows() ? 1 : 0); renderNonInstancedMeshes(scene, sceneShaderProgram, viewMatrix, lightViewMatrix); renderInstancedMeshes(scene, sceneShaderProgram, viewMatrix, lightViewMatrix); sceneShaderProgram.unbind(); }
@Override public void init(Window window) throws Exception { renderer.init(window); scene = new Scene(); float skyBoxScale = 50.0f; float terrainScale = 10; int terrainSize = 3; float minY = -0.1f; float maxY = 0.1f; int textInc = 40; Terrain terrain = new Terrain(terrainSize, terrainScale, minY, maxY, "/textures/heightmap.png", "/textures/terrain.png", textInc); scene.setGameItems(terrain.getGameItems()); // Setup SkyBox SkyBox skyBox = new SkyBox("/models/skybox.obj", "/textures/skybox.png"); skyBox.setScale(skyBoxScale); scene.setSkyBox(skyBox); // Setup Lights setupLights(); // Create HUD hud = new Hud("DEMO"); camera.getPosition().x = 0.0f; camera.getPosition().z = 0.0f; camera.getPosition().y = -0.2f; camera.getRotation().x = 10.f; }
@Override public void init(Window window) throws Exception { renderer.init(window); scene = new Scene(); // Setup GameItems float reflectance = 1f; Mesh cubeMesh = OBJLoader.loadMesh("/models/cube.obj"); Material cubeMaterial = new Material(new Vector4f(0, 1, 0, 1), reflectance); cubeMesh.setMaterial(cubeMaterial); cubeGameItem = new GameItem(cubeMesh); cubeGameItem.setPosition(0, 0, 0); cubeGameItem.setScale(0.5f); Mesh quadMesh = OBJLoader.loadMesh("/models/plane.obj"); Material quadMaterial = new Material(new Vector4f(0.0f, 0.0f, 1.0f, 10.0f), reflectance); quadMesh.setMaterial(quadMaterial); GameItem quadGameItem = new GameItem(quadMesh); quadGameItem.setPosition(0, -1, 0); quadGameItem.setScale(2.5f); scene.setGameItems(new GameItem[]{cubeGameItem, quadGameItem}); // Setup Lights setupLights(); camera.getPosition().z = 2; hud = new Hud(""); }
private void setupLights() { SceneLight sceneLight = new SceneLight(); scene.setSceneLight(sceneLight); // Ambient Light sceneLight.setAmbientLight(new Vector3f(1.0f, 1.0f, 1.0f)); // Directional Light float lightIntensity = 1.0f; Vector3f lightPosition = new Vector3f(-1, 0, 0); sceneLight.setDirectionalLight(new DirectionalLight(new Vector3f(1, 1, 1), lightPosition, lightIntensity)); }