From 9ea8587e10ac0ea25d6864c4551488e3f340efc3 Mon Sep 17 00:00:00 2001 From: ArtemPopof Date: Sat, 17 Sep 2022 15:19:52 +0300 Subject: [PATCH] skies with clouds --- .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../7.0/dependencies-accessors/gc.properties | 0 assets/.gradle/7.0/fileChanges/last-build.bin | Bin 0 -> 1 bytes assets/.gradle/7.0/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes assets/.gradle/7.0/gc.properties | 0 assets/.gradle/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/configuration-cache/gc.properties | 0 assets/.gradle/vcs-1/gc.properties | 0 build.gradle | 4 +- .../java/com/grandopengame/engine/Main.java | 9 -- .../grandopengame/engine/core/MainLoop.java | 104 ------------------ src/main/java/com/mygame/Main.java | 52 ++++++++- 12 files changed, 50 insertions(+), 119 deletions(-) create mode 100644 assets/.gradle/7.0/dependencies-accessors/dependencies-accessors.lock create mode 100644 assets/.gradle/7.0/dependencies-accessors/gc.properties create mode 100644 assets/.gradle/7.0/fileChanges/last-build.bin create mode 100644 assets/.gradle/7.0/fileHashes/fileHashes.lock create mode 100644 assets/.gradle/7.0/gc.properties create mode 100644 assets/.gradle/checksums/checksums.lock create mode 100644 assets/.gradle/configuration-cache/gc.properties create mode 100644 assets/.gradle/vcs-1/gc.properties delete mode 100644 src/main/java/com/grandopengame/engine/Main.java delete mode 100644 src/main/java/com/grandopengame/engine/core/MainLoop.java diff --git a/assets/.gradle/7.0/dependencies-accessors/dependencies-accessors.lock b/assets/.gradle/7.0/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..d8e624ea9ebdc50882d4d83f6273b50b0c8a1165 GIT binary patch literal 17 TcmZS1kYE3I;+yg^1}FdkIJ^X* literal 0 HcmV?d00001 diff --git a/assets/.gradle/7.0/dependencies-accessors/gc.properties b/assets/.gradle/7.0/dependencies-accessors/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/assets/.gradle/7.0/fileChanges/last-build.bin b/assets/.gradle/7.0/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/assets/.gradle/7.0/fileHashes/fileHashes.lock b/assets/.gradle/7.0/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..df22b2b2fe68414f79a5479267edef9aae4e08ab GIT binary patch literal 17 TcmZQpKBo{@d_-d|0~7!NDe(hu literal 0 HcmV?d00001 diff --git a/assets/.gradle/7.0/gc.properties b/assets/.gradle/7.0/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/assets/.gradle/checksums/checksums.lock b/assets/.gradle/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..00762cfb42cc5152cbb2772ac52fbae88e8c85e2 GIT binary patch literal 17 ScmZRsW=^sV$`#0CfC2y=n*v?{ literal 0 HcmV?d00001 diff --git a/assets/.gradle/configuration-cache/gc.properties b/assets/.gradle/configuration-cache/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/assets/.gradle/vcs-1/gc.properties b/assets/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/build.gradle b/build.gradle index e1af665..a28ab52 100644 --- a/build.gradle +++ b/build.gradle @@ -50,7 +50,9 @@ dependencies { implementation "org.jmonkeyengine:jme3-jbullet:$jmeVer" // Additional Libraries - + implementation "org.jmonkeyengine:jme3-testdata:$jmeVer" + implementation 'com.github.stephengold:SkyControl:1.0.3' + // Assets sub-project runtimeOnly project(':assets') } diff --git a/src/main/java/com/grandopengame/engine/Main.java b/src/main/java/com/grandopengame/engine/Main.java deleted file mode 100644 index 41a2183..0000000 --- a/src/main/java/com/grandopengame/engine/Main.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.grandopengame.engine; - -import com.grandopengame.engine.core.MainLoop; - -public class Main { - public static void main(String[] args) { - new MainLoop().run(); - } -} diff --git a/src/main/java/com/grandopengame/engine/core/MainLoop.java b/src/main/java/com/grandopengame/engine/core/MainLoop.java deleted file mode 100644 index 8fac9c8..0000000 --- a/src/main/java/com/grandopengame/engine/core/MainLoop.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.grandopengame.engine.core; - -import lombok.extern.log4j.Log4j2; -import org.lwjgl.glfw.GLFWErrorCallback; -import org.lwjgl.glfw.GLFWVidMode; -import org.lwjgl.opengl.GL; - -import java.util.Objects; - -import static org.lwjgl.glfw.Callbacks.glfwFreeCallbacks; -import static org.lwjgl.glfw.GLFW.*; -import static org.lwjgl.opengl.GL11.*; -import static org.lwjgl.system.MemoryStack.stackPush; -import static org.lwjgl.system.MemoryUtil.NULL; - -/** - * Main lwjgl loop is here - */ -@Log4j2 -public class MainLoop { - private long windowHandle; - - public void run() { - log.info("Running main game loop"); - - init(); - loop(); - - // Free the window callbacks and destroy the window - glfwFreeCallbacks(windowHandle); - glfwDestroyWindow(windowHandle); - - // Terminate GLFW and free the error callback - glfwTerminate(); - Objects.requireNonNull(glfwSetErrorCallback(null)).free(); - } - - private void init() { - // Setup an error callback. The default implementation - // will print the error message - GLFWErrorCallback.createPrint(System.err).set(); - - if (!glfwInit()) { - throw new IllegalStateException("Unable to initialize GLFW"); - } - - // Configure GLFW - glfwDefaultWindowHints(); - glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); - glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); - - // Create the window - windowHandle = glfwCreateWindow(600, 600, "GrandOpenGame", NULL, NULL); - if (windowHandle == NULL) { - throw new RuntimeException("Failed to create the GLFW window"); - } - - // Setup a key callback. It will be called every time a key is pressed, repeated or released. - glfwSetKeyCallback(windowHandle, (window, key, scancode, action, mods) -> { - if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) { - glfwSetWindowShouldClose(window, true); - } - }); - - // Get the thread stack and push a new frame - try (var stack = stackPush()) { - var pWidth = stack.mallocInt(1); - var pHeight = stack.mallocInt(1); - - // Get the window size passed to glfwCreateWindow - glfwGetWindowSize(windowHandle, pWidth, pHeight); - - // Get the resolution of the primary display - GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); - - // Center the window - assert vidmode != null; - glfwSetWindowPos(windowHandle, - (vidmode.width() - pWidth.get(0)) / 2, - (vidmode.height() - pHeight.get(0)) / 2); - } - - // Make the OpenGL context current - glfwMakeContextCurrent(windowHandle); - // Enable v-sync - glfwSwapInterval(1); - - // Make the window visible - glfwShowWindow(windowHandle); - } - - private void loop() { - GL.createCapabilities(); - - // Set the clear color - glClearColor(1.0f, 0.0f, 0.0f, 0.0f); - - while (!glfwWindowShouldClose(windowHandle)) { - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glfwSwapBuffers(windowHandle); - glfwPollEvents(); - } - } -} diff --git a/src/main/java/com/mygame/Main.java b/src/main/java/com/mygame/Main.java index 6e10aa4..1801a5b 100644 --- a/src/main/java/com/mygame/Main.java +++ b/src/main/java/com/mygame/Main.java @@ -10,14 +10,19 @@ import com.jme3.input.KeyInput; import com.jme3.input.controls.ActionListener; import com.jme3.input.controls.KeyTrigger; +import com.jme3.light.AmbientLight; import com.jme3.light.DirectionalLight; -import com.jme3.material.Material; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector3f; import com.jme3.renderer.Camera; import com.jme3.renderer.RenderManager; -import com.jme3.scene.Geometry; -import com.jme3.scene.shape.Box; +import com.jme3.renderer.ViewPort; +import com.jme3.renderer.queue.RenderQueue; +import com.jme3.shadow.DirectionalLightShadowRenderer; +import com.jme3.shadow.EdgeFilteringMode; +import jme3utilities.sky.SkyControl; +import jme3utilities.sky.StarsOption; +import jme3utilities.sky.SunAndStars; /** * This is the Main Class of your Game. You should only do initialization here. @@ -43,6 +48,8 @@ public static void main(String[] args) { @Override public void simpleInitApp() { + camera = getCamera(); + var scene = assetManager.loadModel("Scenes/yivysky-osm.j3o"); var bulletAppState = new BulletAppState(); @@ -50,7 +57,8 @@ public void simpleInitApp() { stateManager.attach(bulletAppState); setupLight(); - + setupSky(); + rootNode.attachChild(scene); var floor = rootNode.getChild("Floor"); var floorControl = new RigidBodyControl(0); @@ -68,7 +76,6 @@ public void simpleInitApp() { bulletAppState.getPhysicsSpace().add(playerControl); this.getFlyByCamera().setEnabled(false); - camera = getCamera(); var chaseCamera = new ChaseCamera(camera, player, inputManager); addInputMappings(); @@ -80,6 +87,41 @@ private void setupLight() { sun.setColor(ColorRGBA.White); sun.setDirection(new Vector3f(-.5f,-.5f,-.5f).normalizeLocal()); rootNode.addLight(sun); + rootNode.addLight(new AmbientLight()); + + rootNode.setShadowMode(RenderQueue.ShadowMode.CastAndReceive); + var shadowRenderer + = new DirectionalLightShadowRenderer(assetManager, 4_096, 4); + ViewPort viewPort = getViewPort(); + viewPort.addProcessor(shadowRenderer); + shadowRenderer.setEdgeFilteringMode(EdgeFilteringMode.PCFPOISSON); + shadowRenderer.setLight(sun); + shadowRenderer.setShadowIntensity(0.3f); + shadowRenderer.setShadowZExtend(256f); + shadowRenderer.setShadowZFadeLength(128f); + + } + + private void setupSky() { +// var sky = SkyFactory.createSky(assetManager, +// "Textures/Sky/Bright/BrightSky.dds", +// SkyFactory.EnvMapType.CubeMap); +// + var sky = new SkyControl(assetManager, camera, + 0.5f, StarsOption.TopDome, true); + + rootNode.addControl(sky); + + sky.setSolarDiameter(0.1f); + sky.setCloudsRate(0.7f); + sky.setCloudiness(0.8f); + sky.setCloudsYOffset(0.4f); + + SunAndStars sunAndStars = sky.getSunAndStars(); + sunAndStars.setHour(16f); // 4 p.m. + sunAndStars.setObserverLatitude(0.63f); // 36 degrees north + + sky.setEnabled(true); } private void addInputMappings() {