diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b83d2226 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target/ diff --git a/nbactions-lwjgl-natives-macos.xml b/nbactions-lwjgl-natives-macos.xml new file mode 100644 index 00000000..c6ba5e42 --- /dev/null +++ b/nbactions-lwjgl-natives-macos.xml @@ -0,0 +1,46 @@ + + + + run + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.0.0:exec + + + -XstartOnFirstThread -classpath %classpath electrosphere.main.Main + java + + + + debug + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.0.0:exec + + + -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -XstartOnFirstThread -classpath %classpath electrosphere.main.Main + java + true + + + + profile + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.0.0:exec + + + -XstartOnFirstThread -classpath %classpath electrosphere.main.Main + java + + + diff --git a/nbactions.xml b/nbactions.xml index 63a0e016..21a9f2fd 100644 --- a/nbactions.xml +++ b/nbactions.xml @@ -10,7 +10,36 @@ org.codehaus.mojo:exec-maven-plugin:1.5.0:exec - -classpath %classpath main.Main + -classpath %classpath electrosphere.main.Main + java + + + + debug + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.0.0:exec + + + -agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address} -classpath %classpath electrosphere.main.Main + java + true + + + + profile + + jar + + + process-classes + org.codehaus.mojo:exec-maven-plugin:3.0.0:exec + + + -classpath %classpath electrosphere.main.Main java diff --git a/pom.xml b/pom.xml index 659f1d70..b7f16ca3 100644 --- a/pom.xml +++ b/pom.xml @@ -1,8 +1,8 @@ 4.0.0 - orbitalstudio - InfiniteStratos + electrosphere + Renderer 0.1 jar @@ -79,11 +79,21 @@ joml ${joml.version} + + com.google.code.gson gson 2.8.6 + + + + + electrosphere + TerrainGen + 0.1 + diff --git a/src/main/java/audio/AudioEngine.java b/src/main/java/audio/AudioEngine.java deleted file mode 100644 index 7fff6414..00000000 --- a/src/main/java/audio/AudioEngine.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package audio; - -/** - * - * @author amaterasu - */ -public class AudioEngine { - -} diff --git a/src/main/java/RendererObjects/AnimChannel.java b/src/main/java/electrosphere/RendererObjects/AnimChannel.java similarity index 99% rename from src/main/java/RendererObjects/AnimChannel.java rename to src/main/java/electrosphere/RendererObjects/AnimChannel.java index 74322414..8a645de8 100644 --- a/src/main/java/RendererObjects/AnimChannel.java +++ b/src/main/java/electrosphere/RendererObjects/AnimChannel.java @@ -1,4 +1,4 @@ -package RendererObjects; +package electrosphere.RendererObjects; import java.util.ArrayList; import java.util.Iterator; diff --git a/src/main/java/RendererObjects/AnimNode.java b/src/main/java/electrosphere/RendererObjects/AnimNode.java similarity index 93% rename from src/main/java/RendererObjects/AnimNode.java rename to src/main/java/electrosphere/RendererObjects/AnimNode.java index 583261d6..bfd64ec1 100644 --- a/src/main/java/RendererObjects/AnimNode.java +++ b/src/main/java/electrosphere/RendererObjects/AnimNode.java @@ -1,4 +1,4 @@ -package RendererObjects; +package electrosphere.RendererObjects; import java.util.ArrayList; import org.joml.Matrix4f; diff --git a/src/main/java/RendererObjects/Animation.java b/src/main/java/electrosphere/RendererObjects/Animation.java similarity index 99% rename from src/main/java/RendererObjects/Animation.java rename to src/main/java/electrosphere/RendererObjects/Animation.java index a8f4656e..494f526e 100644 --- a/src/main/java/RendererObjects/Animation.java +++ b/src/main/java/electrosphere/RendererObjects/Animation.java @@ -1,4 +1,4 @@ -package RendererObjects; +package electrosphere.RendererObjects; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/RendererObjects/Bone.java b/src/main/java/electrosphere/RendererObjects/Bone.java similarity index 85% rename from src/main/java/RendererObjects/Bone.java rename to src/main/java/electrosphere/RendererObjects/Bone.java index a752dc97..b69dfdb8 100644 --- a/src/main/java/RendererObjects/Bone.java +++ b/src/main/java/electrosphere/RendererObjects/Bone.java @@ -1,4 +1,4 @@ -package RendererObjects; +package electrosphere.RendererObjects; import java.util.ArrayList; import java.util.HashMap; @@ -28,7 +28,7 @@ public class Bone { deform = new Matrix4f(); final_transform = new Matrix4f(); boneID = raw_data.mName().dataString(); - inverseBindPoseMatrix = util.util.convertAIMatrix(raw_data.mOffsetMatrix()); + inverseBindPoseMatrix = electrosphere.util.util.convertAIMatrix(raw_data.mOffsetMatrix()); this.raw_data = raw_data; } } diff --git a/src/main/java/RendererObjects/Camera.java b/src/main/java/electrosphere/RendererObjects/Camera.java similarity index 97% rename from src/main/java/RendererObjects/Camera.java rename to src/main/java/electrosphere/RendererObjects/Camera.java index a19aaff4..a13bd37a 100644 --- a/src/main/java/RendererObjects/Camera.java +++ b/src/main/java/electrosphere/RendererObjects/Camera.java @@ -1,4 +1,4 @@ -package RendererObjects; +package electrosphere.RendererObjects; import org.joml.Matrix4f; import org.joml.Quaternionf; diff --git a/src/main/java/RendererObjects/Keyframe.java b/src/main/java/electrosphere/RendererObjects/Keyframe.java similarity index 96% rename from src/main/java/RendererObjects/Keyframe.java rename to src/main/java/electrosphere/RendererObjects/Keyframe.java index 0b4ea360..b5bd8964 100644 --- a/src/main/java/RendererObjects/Keyframe.java +++ b/src/main/java/electrosphere/RendererObjects/Keyframe.java @@ -1,4 +1,4 @@ -package RendererObjects; +package electrosphere.RendererObjects; import org.joml.Quaternionf; import org.joml.Vector3f; diff --git a/src/main/java/RendererObjects/Light/DirectionalLight.java b/src/main/java/electrosphere/RendererObjects/Light/DirectionalLight.java similarity index 97% rename from src/main/java/RendererObjects/Light/DirectionalLight.java rename to src/main/java/electrosphere/RendererObjects/Light/DirectionalLight.java index 567282af..7b9b7d3f 100644 --- a/src/main/java/RendererObjects/Light/DirectionalLight.java +++ b/src/main/java/electrosphere/RendererObjects/Light/DirectionalLight.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package RendererObjects.Light; +package electrosphere.RendererObjects.Light; import org.joml.Vector3f; diff --git a/src/main/java/RendererObjects/Light/LightBuffer.java b/src/main/java/electrosphere/RendererObjects/Light/LightBuffer.java similarity index 93% rename from src/main/java/RendererObjects/Light/LightBuffer.java rename to src/main/java/electrosphere/RendererObjects/Light/LightBuffer.java index 984790dd..b283b171 100644 --- a/src/main/java/RendererObjects/Light/LightBuffer.java +++ b/src/main/java/electrosphere/RendererObjects/Light/LightBuffer.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package RendererObjects.Light; +package electrosphere.RendererObjects.Light; import static org.lwjgl.opengl.GL15.*; import static org.lwjgl.opengl.GL31.GL_UNIFORM_BUFFER; diff --git a/src/main/java/RendererObjects/Light/PointLight.java b/src/main/java/electrosphere/RendererObjects/Light/PointLight.java similarity index 98% rename from src/main/java/RendererObjects/Light/PointLight.java rename to src/main/java/electrosphere/RendererObjects/Light/PointLight.java index 425f85ea..f92ab452 100644 --- a/src/main/java/RendererObjects/Light/PointLight.java +++ b/src/main/java/electrosphere/RendererObjects/Light/PointLight.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package RendererObjects.Light; +package electrosphere.RendererObjects.Light; import org.joml.Vector3f; diff --git a/src/main/java/RendererObjects/Light/SpotLight.java b/src/main/java/electrosphere/RendererObjects/Light/SpotLight.java similarity index 98% rename from src/main/java/RendererObjects/Light/SpotLight.java rename to src/main/java/electrosphere/RendererObjects/Light/SpotLight.java index 8ccbd174..cb510e79 100644 --- a/src/main/java/RendererObjects/Light/SpotLight.java +++ b/src/main/java/electrosphere/RendererObjects/Light/SpotLight.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package RendererObjects.Light; +package electrosphere.RendererObjects.Light; import org.joml.Vector3f; diff --git a/src/main/java/RendererObjects/Material.java b/src/main/java/electrosphere/RendererObjects/Material.java similarity index 95% rename from src/main/java/RendererObjects/Material.java rename to src/main/java/electrosphere/RendererObjects/Material.java index 59502d92..8c133bbe 100644 --- a/src/main/java/RendererObjects/Material.java +++ b/src/main/java/electrosphere/RendererObjects/Material.java @@ -3,9 +3,9 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package RendererObjects; +package electrosphere.RendererObjects; -import RendererObjects.texture.Texture; +import electrosphere.RendererObjects.texture.Texture; import org.lwjgl.PointerBuffer; import org.lwjgl.assimp.AIMaterial; import org.lwjgl.assimp.AIMaterialProperty; diff --git a/src/main/java/RendererObjects/Mesh.java b/src/main/java/electrosphere/RendererObjects/Mesh.java similarity index 97% rename from src/main/java/RendererObjects/Mesh.java rename to src/main/java/electrosphere/RendererObjects/Mesh.java index 4f100601..2d160b4b 100644 --- a/src/main/java/RendererObjects/Mesh.java +++ b/src/main/java/electrosphere/RendererObjects/Mesh.java @@ -1,8 +1,8 @@ -package RendererObjects; +package electrosphere.RendererObjects; -import main.Globals; -import main.Main; -import RendererObjects.Light.LightBuffer; +import electrosphere.main.Globals; +import electrosphere.main.Main; +import electrosphere.RendererObjects.Light.LightBuffer; import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.util.ArrayList; @@ -243,7 +243,7 @@ public class Mesh { // System.out.println("Num weights: " + currentBoneData.mNumWeights()); Bone currentBone = new Bone(); currentBone.boneID = currentBoneData.mName().dataString(); - currentBone.inverseBindPoseMatrix = util.util.convertAIMatrix(currentBoneData.mOffsetMatrix()); + currentBone.inverseBindPoseMatrix = electrosphere.util.util.convertAIMatrix(currentBoneData.mOffsetMatrix()); currentBone.numWeights = currentBoneData.mNumWeights(); currentBone.weights = new HashMap(); Iterator weightIterator = currentBoneData.mWeights().iterator(); @@ -409,7 +409,7 @@ public class Mesh { GL20.glUniformMatrix4fv(glGetUniformLocation(shader.shaderProgram, "model"), false, parent.modelMatrix.get(new float[16])); - Vector3f cam_Loc = Globals.camera_visible.pos_Center; + Vector3f cam_Loc = Globals.cameraVisible.pos_Center; temp[0] = cam_Loc.x; temp[1] = cam_Loc.y; temp[2] = cam_Loc.z; @@ -420,7 +420,7 @@ public class Mesh { if(material == null){ - Globals.material_default.apply_material(0,1); + Globals.materialDefault.apply_material(0,1); GL20.glUniform1i(glGetUniformLocation(shader.shaderProgram, "hasTransparency"), 0); } else { material.apply_material(); @@ -463,7 +463,7 @@ public class Mesh { glUniformMatrix4fv(shader.shaderVertexModelLoc, false, parent.modelMatrix.get(new float[16])); glUniformMatrix4fv(shader.shaderVertexViewLoc, false, Globals.viewMatrix.get(new float[16])); glUniformMatrix4fv(shader.shaderVertexProjectionLoc, false, Globals.projectionMatrix.get(new float[16])); - glUniform3fv(shader.shaderVertexViewPosLoc, Globals.camera_visible.pos_Center.get(BufferUtils.createFloatBuffer(3))); + glUniform3fv(shader.shaderVertexViewPosLoc, Globals.cameraVisible.pos_Center.get(BufferUtils.createFloatBuffer(3))); // // @@ -488,7 +488,7 @@ public class Mesh { test_Light_Data[2] = 0.5f; glUniform3fv(glGetUniformLocation(shader.shaderProgram, "dirLight.diffuse"), test_Light_Data); - Vector3f cam_Loc = Globals.camera_visible.pos_Center; + Vector3f cam_Loc = Globals.cameraVisible.pos_Center; test_Light_Data = new float[3]; test_Light_Data[0] = cam_Loc.x; test_Light_Data[1] = cam_Loc.y; diff --git a/src/main/java/RendererObjects/Model.java b/src/main/java/electrosphere/RendererObjects/Model.java similarity index 97% rename from src/main/java/RendererObjects/Model.java rename to src/main/java/electrosphere/RendererObjects/Model.java index 394aa616..31ddd261 100644 --- a/src/main/java/RendererObjects/Model.java +++ b/src/main/java/electrosphere/RendererObjects/Model.java @@ -1,6 +1,6 @@ -package RendererObjects; +package electrosphere.RendererObjects; -import main.Globals; +import electrosphere.main.Globals; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -21,7 +21,7 @@ import static org.lwjgl.opengl.GL13.*; import static org.lwjgl.opengl.GL15.*; import static org.lwjgl.opengl.GL20.*; import static org.lwjgl.opengl.GL30.*; -import RendererObjects.texture.TextureMap; +import electrosphere.RendererObjects.texture.TextureMap; import java.nio.FloatBuffer; import java.util.HashMap; import java.util.Iterator; @@ -119,7 +119,7 @@ public class Model { //parse animation nodes and form hierarchy // AINode rootNode = s.mRootNode(); - rVal.globalInverseTransform = util.util.convertAIMatrix(rootNode.mTransformation()); + rVal.globalInverseTransform = electrosphere.util.util.convertAIMatrix(rootNode.mTransformation()); // System.out.println("Global inverse transform"); // System.out.println(globalInverseTransform); rVal.root_anim_node = rVal.build_anim_node_map(s.mRootNode(),null); @@ -324,7 +324,7 @@ public class Model { // System.out.println("\n\n\n\n"); // } } else { - n.transform = n.transform.mul(util.util.convertAIMatrix(n.raw_data.mTransformation())); + n.transform = n.transform.mul(electrosphere.util.util.convertAIMatrix(n.raw_data.mTransformation())); } Iterator node_iterator = n.children.iterator(); while(node_iterator.hasNext()){ diff --git a/src/main/java/RendererObjects/RenderUtils.java b/src/main/java/electrosphere/RendererObjects/RenderUtils.java similarity index 95% rename from src/main/java/RendererObjects/RenderUtils.java rename to src/main/java/electrosphere/RendererObjects/RenderUtils.java index 22300950..dafd068b 100644 --- a/src/main/java/RendererObjects/RenderUtils.java +++ b/src/main/java/electrosphere/RendererObjects/RenderUtils.java @@ -3,13 +3,13 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package RendererObjects; +package electrosphere.RendererObjects; import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.util.ArrayList; import java.util.Iterator; -import main.Globals; +import electrosphere.main.Globals; import org.joml.Matrix4f; import org.joml.Vector3f; import org.lwjgl.BufferUtils; @@ -44,10 +44,10 @@ import static org.lwjgl.opengl.GL30.glGenVertexArrays; */ public class RenderUtils { public static Model createSkyboxModel(Material optionalMaterial){ - Model skybox_model = new Model(); - skybox_model.meshes = new ArrayList(); + Model skyboxModel = new Model(); + skyboxModel.meshes = new ArrayList(); - skybox_model.modelMatrix = new Matrix4f(); + skyboxModel.modelMatrix = new Matrix4f(); @@ -61,8 +61,8 @@ public class RenderUtils { glUseProgram(shader.shaderProgram); if(material == null){ - Globals.material_default.apply_material(0,1); - Iterator colorIterator = Globals.skybox_colors.iterator(); + Globals.materialDefault.apply_material(0,1); + Iterator colorIterator = Globals.skyboxColors.iterator(); int counter = 0; float[] temp = new float[3]; while(colorIterator.hasNext()){ @@ -85,7 +85,7 @@ public class RenderUtils { glUniformMatrix4fv(shader.shaderVertexModelLoc, false, parent.modelMatrix.get(new float[16])); glUniformMatrix4fv(shader.shaderVertexViewLoc, false, new Matrix4f(Globals.viewMatrix).scale(100).get(new float[16])); glUniformMatrix4fv(shader.shaderVertexProjectionLoc, false, Globals.projectionMatrix.get(new float[16])); - glUniform3fv(shader.shaderVertexViewPosLoc, Globals.camera_visible.pos_Center.get(BufferUtils.createFloatBuffer(3))); + glUniform3fv(shader.shaderVertexViewPosLoc, Globals.cameraVisible.pos_Center.get(BufferUtils.createFloatBuffer(3))); GL11.glDrawElements(GL_TRIANGLES, elementCount, GL_UNSIGNED_INT, 0); @@ -268,12 +268,14 @@ public class RenderUtils { skyboxmesh.nodeID = "skybox"; - skyboxmesh.parent = skybox_model; + skyboxmesh.parent = skyboxModel; - skybox_model.meshes.add(skyboxmesh); + skyboxModel.meshes.add(skyboxmesh); - return skybox_model; + return skyboxModel; } + + } diff --git a/src/main/java/RendererObjects/ShaderProgram.java b/src/main/java/electrosphere/RendererObjects/ShaderProgram.java similarity index 99% rename from src/main/java/RendererObjects/ShaderProgram.java rename to src/main/java/electrosphere/RendererObjects/ShaderProgram.java index fa73c977..84421386 100644 --- a/src/main/java/RendererObjects/ShaderProgram.java +++ b/src/main/java/electrosphere/RendererObjects/ShaderProgram.java @@ -1,6 +1,6 @@ -package RendererObjects; +package electrosphere.RendererObjects; -import main.Main; +import electrosphere.main.Main; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; diff --git a/src/main/java/RendererObjects/texture/Texture.java b/src/main/java/electrosphere/RendererObjects/texture/Texture.java similarity index 99% rename from src/main/java/RendererObjects/texture/Texture.java rename to src/main/java/electrosphere/RendererObjects/texture/Texture.java index 75001661..07a59a45 100644 --- a/src/main/java/RendererObjects/texture/Texture.java +++ b/src/main/java/electrosphere/RendererObjects/texture/Texture.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package RendererObjects.texture; +package electrosphere.RendererObjects.texture; import java.awt.Color; import java.awt.image.BufferedImage; diff --git a/src/main/java/RendererObjects/texture/TextureMap.java b/src/main/java/electrosphere/RendererObjects/texture/TextureMap.java similarity index 97% rename from src/main/java/RendererObjects/texture/TextureMap.java rename to src/main/java/electrosphere/RendererObjects/texture/TextureMap.java index d0c87c9f..41714191 100644 --- a/src/main/java/RendererObjects/texture/TextureMap.java +++ b/src/main/java/electrosphere/RendererObjects/texture/TextureMap.java @@ -1,4 +1,4 @@ -package RendererObjects.texture; +package electrosphere.RendererObjects.texture; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/electrosphere/audio/AudioEngine.java b/src/main/java/electrosphere/audio/AudioEngine.java new file mode 100644 index 00000000..ef47e1c5 --- /dev/null +++ b/src/main/java/electrosphere/audio/AudioEngine.java @@ -0,0 +1,9 @@ +package electrosphere.audio; + +/** + * + * @author amaterasu + */ +public class AudioEngine { + +} diff --git a/src/main/java/entity/Entity.java b/src/main/java/electrosphere/entity/Entity.java similarity index 95% rename from src/main/java/entity/Entity.java rename to src/main/java/electrosphere/entity/Entity.java index 1d0ba15f..de66dbaf 100644 --- a/src/main/java/entity/Entity.java +++ b/src/main/java/electrosphere/entity/Entity.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package entity; +package electrosphere.entity; import java.util.HashMap; diff --git a/src/main/java/entity/EntityUtil.java b/src/main/java/electrosphere/entity/EntityUtil.java similarity index 86% rename from src/main/java/entity/EntityUtil.java rename to src/main/java/electrosphere/entity/EntityUtil.java index 0276c50f..da031833 100644 --- a/src/main/java/entity/EntityUtil.java +++ b/src/main/java/electrosphere/entity/EntityUtil.java @@ -3,10 +3,10 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package entity; +package electrosphere.entity; -import RendererObjects.Model; -import main.Globals; +import electrosphere.RendererObjects.Model; +import electrosphere.main.Globals; import org.joml.Quaternionf; import org.joml.Vector3f; @@ -38,8 +38,8 @@ public class EntityUtil { rVal.getData().put("position", new Vector3f(0,0,0)); rVal.getData().put("rotation", new Quaternionf().rotateAxis((float)0, new Vector3f(1,0,0))); rVal.getData().put("scale", new Vector3f(1,1,1)); - Globals.entity_list.add(rVal); - Globals.drawable_list.add(rVal); + Globals.entityList.add(rVal); + Globals.drawableList.add(rVal); return rVal; } } diff --git a/src/main/java/electrosphere/main/Globals.java b/src/main/java/electrosphere/main/Globals.java new file mode 100644 index 00000000..02d42eb4 --- /dev/null +++ b/src/main/java/electrosphere/main/Globals.java @@ -0,0 +1,93 @@ +package electrosphere.main; + +import electrosphere.RendererObjects.Camera; +import electrosphere.RendererObjects.Light.DirectionalLight; +import electrosphere.RendererObjects.Light.PointLight; +import electrosphere.RendererObjects.Light.SpotLight; +import electrosphere.RendererObjects.Material; +import electrosphere.RendererObjects.Model; +import electrosphere.RendererObjects.texture.Texture; +import electrosphere.RendererObjects.texture.TextureMap; +import com.google.gson.Gson; +import electrosphere.entity.Entity; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.joml.Matrix4f; +import org.joml.Vector3f; +import electrosphere.util.ModelLoader; + +/** + * + * @author amaterasu + */ +public class Globals { + + // + //OpenGL - Other + // + //Array that holds all models that need to be shoved to the gpu + public static Matrix4f viewMatrix = new Matrix4f(); + public static Matrix4f projectionMatrix; + + + + public static Texture textureDiffuseDefault; + public static Texture textureSpecularDefault; + public static Material materialDefault; + + public static DirectionalLight lightDirectionalDefault; + public static ArrayList lightPointListDefault; + public static SpotLight lightSpotDefault; + + public static TextureMap textureMapDefault; + + public static ArrayList entityList; + public static ArrayList drawableList; + + public static Camera cameraVisible; + + // + //Game specific models + // + + //famous fuckin last words, but temporary solution + //global arraylist of values for the skybox colors + public static ArrayList skyboxColors; + + + + public static void initGlobals(){ + //create default textures + textureDiffuseDefault = new Texture("Textures/default_diffuse.png"); + textureSpecularDefault = new Texture("Textures/default_specular.png"); + //create default material + materialDefault = new Material(); + materialDefault.set_diffuse(textureDiffuseDefault); + materialDefault.set_specular(textureSpecularDefault); + //create default lights + lightDirectionalDefault = new DirectionalLight(new Vector3f(0,-1f,0)); + //load in default texture map + Gson gson = new Gson(); + try { + //deserializes the texture map from its default path using gson + //also done in one line + textureMapDefault = gson.fromJson(Files.newBufferedReader(new File(Thread.currentThread().getContextClassLoader().getResource("Textures/default_texture_map.json").getFile()).toPath()), TextureMap.class); //only the best of coding practices :) + } catch (IOException ex) { ex.printStackTrace(); } //TODO: handle better :tm: + //create entity list + entityList = new ArrayList(); + drawableList = new ArrayList(); + //create the camera object that generates view matrix + cameraVisible = new Camera(); + //init game specific variables + initGameSpecifics(); + //temporary hold for skybox colors + skyboxColors = new ArrayList(); + } + + public static void initGameSpecifics(){ + } +} diff --git a/src/main/java/electrosphere/main/Main.java b/src/main/java/electrosphere/main/Main.java new file mode 100644 index 00000000..cab43b99 --- /dev/null +++ b/src/main/java/electrosphere/main/Main.java @@ -0,0 +1,349 @@ +package electrosphere.main; + +import electrosphere.RendererObjects.Camera; +import electrosphere.RendererObjects.Material; +import electrosphere.RendererObjects.Model; +import electrosphere.RendererObjects.RenderUtils; +import electrosphere.RendererObjects.ShaderProgram; +import electrosphere.RendererObjects.texture.Texture; +import electrosphere.entity.Entity; +import electrosphere.entity.EntityUtil; +import electrosphere.terraingen.TerrainGen; +import electrosphere.terraingen.models.TerrainModel; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Random; +import java.util.concurrent.TimeUnit; +import org.joml.Matrix4f; +import org.joml.Quaternionf; +import org.joml.Vector3f; +import org.lwjgl.glfw.*; +import static org.lwjgl.glfw.GLFW.*; +import org.lwjgl.opengl.*; +import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.opengl.GL13.*; +import static org.lwjgl.opengl.GL14.*; +import static org.lwjgl.opengl.GL15.*; +import static org.lwjgl.opengl.GL20.*; +import static org.lwjgl.opengl.GL30.*; +import static org.lwjgl.system.MemoryUtil.NULL; +import electrosphere.util.ModelLoader; +import electrosphere.util.util; + + +/** + * + * @author amaterasu + */ +public class Main { + // + //Generic OpenGL Statements + // + //Callback function for opengl errors + private final static GLFWErrorCallback ERROR_CALLBACK = GLFWErrorCallback.createPrint(System.err); + private static long window; + + + + + + + + // + //Visualization Controls + // + //These are used in calculating the time between frames for visualization (camera) control and such + public static float deltaTime = 0.0f; + public static float lastFrame = 0.0f; + //View Controls + public static float view_Range = 2000.0f; + public static Camera camera_Current = new Camera(); + /* + Mouse Controls + */ + static float mouse_lastX = 400; + static float mouse_lastY = 300; + static double xpos = 400; + static double ypos = 300; + static float mouseSensitivity = .1f; + static double mouse_X_Buffer[] = new double[1]; + static double mouse_Y_Buffer[] = new double[1]; + static float cameraSpeed; + static float yaw = 150; + static float pitch = 50; + + + + // + //Player Object Variables + // + public static boolean CAMERA_UNDER_USER_CONTROL = false; + public static boolean CAMERA_UNDER_FREE_CONTROL = false; + public static boolean PLAYER_UNDER_USER_CONTROL = true; + public static boolean CAMERA_IS_ORBIT = true; + public static float camera_Orbit_Length = 1.0f; +// public static Camera cam_Player_Orbit; + //Camera angles using theta-phi system + //Euler angles where theta is applied, then phi + //There is no bank applied to the camera + + public static Model model; + + + + + public static void main(String args[]){ + + // + // + // I N I T I A L I Z A T I O N + // + // + + //run initialization stuff + + //Create opengl + createOpenglContext(); + + //init global variables + Globals.initGlobals(); + + + + + initWorld(); + + initSkybox(); + + + + Entity player = new Entity(); + player.getData().put("position", new Vector3f(0f,6f,0f)); + + + + + + /// + /// C A M E R A C R E A T I O N + /// + Camera camera_player_chase = new Camera(); + Camera cam_Player_Orbit = new Camera(); + + + + //main loop + while (!glfwWindowShouldClose(window)) { + + /* + Frame calculation + */ + float currentFrame = (float) glfwGetTime(); + deltaTime = currentFrame - lastFrame; + lastFrame = currentFrame; + + //poll mouse variables and update camera variables + updateMouseVariables(); + + + float cam_Player_Orbit_Magnitude = 1f; + float cam_Player_Orbit_Offset_Height = 1f; + cam_Player_Orbit.pos_Center = new Vector3f(0, 0, 0); + cam_Player_Orbit.pos_Center.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; + cam_Player_Orbit.pos_Center.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; + cam_Player_Orbit.pos_Center.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; + cam_Player_Orbit.pos_Center.normalize(); +// System.out.println(cam_Player_Orbit.pos_Center); + + + + if(CAMERA_IS_ORBIT){ + camera_Current = cam_Player_Orbit; + } + + + + + /// + /// I N P U T C O N T R O L S + /// + cameraSpeed = 2.5f * deltaTime; + if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { + break; + } + if (glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) { + if(CAMERA_UNDER_FREE_CONTROL) { + //cameraSpeed = cameraSpeed * 100; + } else if(PLAYER_UNDER_USER_CONTROL) { + + } + } + if(glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS){ + EntityUtil.getEntityPosition(player).add(new Vector3f(-camera_Current.pos_Center.x,0,-camera_Current.pos_Center.z)); + } + if(glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS){ + EntityUtil.getEntityPosition(player).add(new Vector3f(camera_Current.pos_Center.x,0,camera_Current.pos_Center.z)); + } + if(glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS){ + EntityUtil.getEntityPosition(player).add(new Vector3f(-camera_Current.pos_Center.x,0,-camera_Current.pos_Center.z).rotateY((float)(-90 * Math.PI / 180))); + } + if(glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS){ + EntityUtil.getEntityPosition(player).add(new Vector3f(-camera_Current.pos_Center.x,0,-camera_Current.pos_Center.z).rotateY((float)(90 * Math.PI / 180))); + } + if(glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS){ + EntityUtil.getEntityPosition(player).add(new Vector3f(0,0.6f,0)); + } + if(glfwGetKey(window, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS){ + EntityUtil.getEntityPosition(player).add(new Vector3f(0,-0.6f,0)); + } + + +// camera_player_chase.pos_Center = new Vector3f(EntityUtil.getEntityPosition(player)).sub(EntityUtil.getEntityRotation(player).transform(new Vector3f(-1,1,0))); + + Globals.cameraVisible.apply_camera(camera_player_chase); + + Globals.viewMatrix = Globals.cameraVisible.get_view_matrix(); + Globals.viewMatrix = new Matrix4f().setLookAt(camera_Current.pos_Center, new Vector3f(0,0,0), new Vector3f(camera_Current.pos_Center).add(new Vector3f(0,1.0f,0))).scale(1.0f, 1.5f, 1.0f); + + //Sets the background color. + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + + // + // Draw all entities + // + Iterator entity_iterator = Globals.drawableList.iterator(); + while(entity_iterator.hasNext()){ + Entity currentEntity = entity_iterator.next(); + Model currentModel = EntityUtil.getEntityModel(currentEntity); + currentModel.modelMatrix = new Matrix4f(); + currentModel.modelMatrix.translate(new Vector3f(EntityUtil.getEntityPosition(currentEntity)).sub(EntityUtil.getEntityPosition(player))); + currentModel.modelMatrix.rotate(EntityUtil.getEntityRotation(currentEntity)); + currentModel.modelMatrix.scale(EntityUtil.getEntityScale(currentEntity)); + currentModel.draw(); + } + + + + //check and call events and swap the buffers + glfwSwapBuffers(window); + glfwPollEvents(); + } + //Terminate the program. + glfwTerminate(); + } + + static void sleep(int i) { + try { + TimeUnit.MILLISECONDS.sleep(i); + } catch (InterruptedException ex) { + System.out.println("Sleep somehow interrupted?!"); + } + } + + + + + + + + + + public static void createOpenglContext(){ + //Sets the variables that control the window sizing + int screenWidth = 1920; + int screenHeight = 1080; + //Initializes opengl + glfwInit(); + //Gives hints to glfw to control how opengl will be used + glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); + glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); + glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + //Creates the window reference object + window = glfwCreateWindow(screenWidth, screenHeight, "LearnOpenGL", NULL, NULL); + //Errors for failure to create window (IE: No GUI mode on linux ?) + if (window == NULL) { + System.out.println("Failed to make window."); + glfwTerminate(); + } + //Makes the window that was just created the current OS-level window context + glfwMakeContextCurrent(window); + //Maximize it + glfwMaximizeWindow(window); + //Creates the OpenGL capabilities for the program. + GL.createCapabilities(); + + //This enables Z-buffering so that farther-back polygons are not drawn over nearer ones + glEnable(GL_DEPTH_TEST); + + // Support for transparency + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + //Hide the cursor and capture it + glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); + + + + + //Points the texture uniforms in the shader programs at the correct variables + + + + + // + // Projection and View matrix creation + // + Globals.projectionMatrix = new Matrix4f(); + Globals.viewMatrix = new Matrix4f(); + float FOV = (float)(120.0f * Math.PI /180.0f); + Globals.projectionMatrix.setPerspective(FOV, 1.0f, 0.1f, view_Range); + Globals.viewMatrix.translation(new Vector3f(0.0f,0.0f,-3.0f)); + } + + + public static void updateMouseVariables(){ + glfwGetCursorPos(window, mouse_X_Buffer, mouse_Y_Buffer); + xpos = mouse_X_Buffer[0]; + ypos = mouse_Y_Buffer[0]; + float xoffset = (float) (xpos - mouse_lastX) * mouseSensitivity; + float yoffset = (float) (mouse_lastY - ypos) * mouseSensitivity; + mouse_lastX = (float) xpos; + mouse_lastY = (float) ypos; + + yaw = yaw + xoffset; + pitch = pitch - yoffset; + + if (pitch > 100.0f) { + pitch = 100.0f; + } + if (pitch < -99.0f) { + pitch = -99.0f; + } + } + + static void initSkybox(){ + Model skyboxModel = RenderUtils.createSkyboxModel(null); + Entity skyboxEntity = EntityUtil.spawnDrawableEntity(skyboxModel); + EntityUtil.getEntityScale(skyboxEntity).mul(100); + + + Globals.skyboxColors.add(new Vector3f(100,150,200)); + Globals.skyboxColors.add(new Vector3f(100,150,200)); + Globals.skyboxColors.add(new Vector3f(50,100,150)); + Globals.skyboxColors.add(new Vector3f(50,100,150)); + Globals.skyboxColors.add(new Vector3f(100,150,200)); + Globals.skyboxColors.add(new Vector3f(100,150,200)); + Globals.skyboxColors.add(new Vector3f(50,100,150)); + Globals.skyboxColors.add(new Vector3f(50,100,150)); + } + + + + static void initWorld(){ + TerrainGen terrainGen = new TerrainGen(); + TerrainModel terrainModel = terrainGen.generateModel(); + float[][] elevation = terrainModel.getElevation(); + } +} diff --git a/src/main/java/net/Client.java b/src/main/java/electrosphere/net/Client.java similarity index 90% rename from src/main/java/net/Client.java rename to src/main/java/electrosphere/net/Client.java index 76a14a5d..2de9d0fc 100644 --- a/src/main/java/net/Client.java +++ b/src/main/java/electrosphere/net/Client.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package net; +package electrosphere.net; /** * diff --git a/src/main/java/net/Server.java b/src/main/java/electrosphere/net/Server.java similarity index 90% rename from src/main/java/net/Server.java rename to src/main/java/electrosphere/net/Server.java index 6ecf220c..9206f41b 100644 --- a/src/main/java/net/Server.java +++ b/src/main/java/electrosphere/net/Server.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package net; +package electrosphere.net; /** * diff --git a/src/main/java/util/ModelLoader.java b/src/main/java/electrosphere/util/ModelLoader.java similarity index 90% rename from src/main/java/util/ModelLoader.java rename to src/main/java/electrosphere/util/ModelLoader.java index 8eae31f7..631de57e 100644 --- a/src/main/java/util/ModelLoader.java +++ b/src/main/java/electrosphere/util/ModelLoader.java @@ -1,11 +1,11 @@ -package util; +package electrosphere.util; -import main.Globals; -import RendererObjects.Material; -import RendererObjects.Mesh; -import RendererObjects.Model; -import RendererObjects.texture.Texture; -import RendererObjects.texture.TextureMap; +import electrosphere.main.Globals; +import electrosphere.RendererObjects.Material; +import electrosphere.RendererObjects.Mesh; +import electrosphere.RendererObjects.Model; +import electrosphere.RendererObjects.texture.Texture; +import electrosphere.RendererObjects.texture.TextureMap; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; @@ -43,7 +43,7 @@ public class ModelLoader { //this way if we change the underlying structure of the TextureMap it doesn't fuck over this logic static void attempt_add_textures_from_pathname(String path, Model m){ //first we get the default texture map that's global - TextureMap global_map = Globals.texture_map_default; + TextureMap global_map = Globals.textureMapDefault; //then we try to get the path of our model from the map Map> mesh_map = global_map.get_mesh_map(path); //if it exists.. @@ -65,7 +65,7 @@ public class ModelLoader { final_material.set_diffuse(diffuse); System.out.println(diffuse); } else { - final_material.set_diffuse(Globals.texture_diffuse_default); + final_material.set_diffuse(Globals.textureDiffuseDefault); } String specular_path = TextureMap.get_specular_path(texture_path_list); if(specular_path != null){ @@ -73,7 +73,7 @@ public class ModelLoader { final_material.set_specular(specular); System.out.println(specular); } else { - final_material.set_specular(Globals.texture_specular_default); + final_material.set_specular(Globals.textureSpecularDefault); } //once we've either added default textures or actual textures, //set the current mesh's material to this new one diff --git a/src/main/java/util/util.java b/src/main/java/electrosphere/util/util.java similarity index 96% rename from src/main/java/util/util.java rename to src/main/java/electrosphere/util/util.java index 23a19873..e4008353 100644 --- a/src/main/java/util/util.java +++ b/src/main/java/electrosphere/util/util.java @@ -1,11 +1,11 @@ -package util; +package electrosphere.util; -import RendererObjects.Material; -import RendererObjects.Mesh; -import RendererObjects.Model; -import RendererObjects.ShaderProgram; -import RendererObjects.texture.Texture; -import RendererObjects.texture.TextureMap; +import electrosphere.RendererObjects.Material; +import electrosphere.RendererObjects.Mesh; +import electrosphere.RendererObjects.Model; +import electrosphere.RendererObjects.ShaderProgram; +import electrosphere.RendererObjects.texture.Texture; +import electrosphere.RendererObjects.texture.TextureMap; import com.google.gson.Gson; import java.io.File; import java.io.IOException; diff --git a/src/main/java/main/Globals.java b/src/main/java/main/Globals.java deleted file mode 100644 index 1bb106d9..00000000 --- a/src/main/java/main/Globals.java +++ /dev/null @@ -1,93 +0,0 @@ -package main; - -import RendererObjects.Camera; -import RendererObjects.Light.DirectionalLight; -import RendererObjects.Light.PointLight; -import RendererObjects.Light.SpotLight; -import RendererObjects.Material; -import RendererObjects.Model; -import RendererObjects.texture.Texture; -import RendererObjects.texture.TextureMap; -import com.google.gson.Gson; -import entity.Entity; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.joml.Matrix4f; -import org.joml.Vector3f; -import util.ModelLoader; - -/** - * - * @author amaterasu - */ -public class Globals { - - // - //OpenGL - Other - // - //Array that holds all models that need to be shoved to the gpu - public static Matrix4f viewMatrix = new Matrix4f(); - public static Matrix4f projectionMatrix; - - - - public static Texture texture_diffuse_default; - public static Texture texture_specular_default; - public static Material material_default; - - public static DirectionalLight light_directional_default; - public static ArrayList light_point_list_default; - public static SpotLight light_spot_default; - - public static TextureMap texture_map_default; - - public static ArrayList entity_list; - public static ArrayList drawable_list; - - public static Camera camera_visible; - - // - //Game specific models - // - - //famous fuckin last words, but temporary solution - //global arraylist of values for the skybox colors - public static ArrayList skybox_colors; - - - - public static void init_globals(){ - //create default textures - texture_diffuse_default = new Texture("Textures/default_diffuse.png"); - texture_specular_default = new Texture("Textures/default_specular.png"); - //create default material - material_default = new Material(); - material_default.set_diffuse(texture_diffuse_default); - material_default.set_specular(texture_specular_default); - //create default lights - light_directional_default = new DirectionalLight(new Vector3f(0,-1f,0)); - //load in default texture map - Gson gson = new Gson(); - try { - //deserializes the texture map from its default path using gson - //also done in one line - texture_map_default = gson.fromJson(Files.newBufferedReader(new File(Thread.currentThread().getContextClassLoader().getResource("Textures/default_texture_map.json").getFile()).toPath()), TextureMap.class); //only the best of coding practices :) - } catch (IOException ex) { ex.printStackTrace(); } //TODO: handle better :tm: - //create entity list - entity_list = new ArrayList(); - drawable_list = new ArrayList(); - //create the camera object that generates view matrix - camera_visible = new Camera(); - //init game specific variables - init_game_specifics(); - //temporary hold for skybox colors - skybox_colors = new ArrayList(); - } - - public static void init_game_specifics(){ - } -} diff --git a/src/main/java/main/Main.java b/src/main/java/main/Main.java deleted file mode 100644 index c2b27685..00000000 --- a/src/main/java/main/Main.java +++ /dev/null @@ -1,564 +0,0 @@ -package main; - -import RendererObjects.Camera; -import RendererObjects.Material; -import RendererObjects.Model; -import RendererObjects.RenderUtils; -import RendererObjects.ShaderProgram; -import RendererObjects.texture.Texture; -import entity.Entity; -import entity.EntityUtil; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.Random; -import java.util.concurrent.TimeUnit; -import org.joml.Matrix4f; -import org.joml.Quaternionf; -import org.joml.Vector3f; -import org.lwjgl.glfw.*; -import static org.lwjgl.glfw.GLFW.*; -import org.lwjgl.opengl.*; -import static org.lwjgl.opengl.GL11.*; -import static org.lwjgl.opengl.GL13.*; -import static org.lwjgl.opengl.GL14.*; -import static org.lwjgl.opengl.GL15.*; -import static org.lwjgl.opengl.GL20.*; -import static org.lwjgl.opengl.GL30.*; -import static org.lwjgl.system.MemoryUtil.NULL; -import util.ModelLoader; -import util.util; - - -/** - * - * @author amaterasu - */ -public class Main { - // - //Generic OpenGL Statements - // - //Callback function for opengl errors - private final static GLFWErrorCallback ERROR_CALLBACK = GLFWErrorCallback.createPrint(System.err); - private static long window; - - - - - - - - // - //Visualization Controls - // - //These are used in calculating the time between frames for visualization (camera) control and such - public static float deltaTime = 0.0f; - public static float lastFrame = 0.0f; - //View Controls - public static float view_Range = 2000.0f; - public static Camera camera_Current = new Camera(); - /* - Mouse Controls - */ - static float mouse_lastX = 400; - static float mouse_lastY = 300; - static double xpos = 400; - static double ypos = 300; - static float mouseSensitivity = .1f; - static double mouse_X_Buffer[] = new double[1]; - static double mouse_Y_Buffer[] = new double[1]; - static float cameraSpeed; - static float yaw = 150; - static float pitch = 50; - - - - // - //Player Object Variables - // - public static boolean CAMERA_UNDER_USER_CONTROL = false; - public static boolean CAMERA_UNDER_FREE_CONTROL = false; - public static boolean PLAYER_UNDER_USER_CONTROL = true; - public static boolean CAMERA_IS_ORBIT = true; - public static float camera_Orbit_Length = 1.0f; -// public static Camera cam_Player_Orbit; - //Camera angles using theta-phi system - //Euler angles where theta is applied, then phi - //There is no bank applied to the camera - - public static Model model; - - - - - public static void main(String args[]){ - - // - // - // I N I T I A L I Z A T I O N - // - // - - //run initialization stuff - - //Create opengl - create_opengl_context(); - - //init global variables - Globals.init_globals(); - - - - - initWorld(); - - init_skybox(); - - - - Entity player = new Entity(); - player.getData().put("position", new Vector3f(0f,6f,0f)); - - - - - - /// - /// C A M E R A C R E A T I O N - /// - Camera camera_player_chase = new Camera(); - Camera cam_Player_Orbit = new Camera(); - - - - //main loop - while (!glfwWindowShouldClose(window)) { - - /* - Frame calculation - */ - float currentFrame = (float) glfwGetTime(); - deltaTime = currentFrame - lastFrame; - lastFrame = currentFrame; - - //poll mouse variables and update camera variables - update_mouse_variables(); - - - float cam_Player_Orbit_Magnitude = 1f; - float cam_Player_Orbit_Offset_Height = 1f; - cam_Player_Orbit.pos_Center = new Vector3f(0, 0, 0); - cam_Player_Orbit.pos_Center.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cam_Player_Orbit.pos_Center.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cam_Player_Orbit.pos_Center.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cam_Player_Orbit.pos_Center.normalize(); -// System.out.println(cam_Player_Orbit.pos_Center); - - - - if(CAMERA_IS_ORBIT){ - camera_Current = cam_Player_Orbit; - } - - - - - /// - /// I N P U T C O N T R O L S - /// - cameraSpeed = 2.5f * deltaTime; - if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) { - break; - } - if (glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS) { - if(CAMERA_UNDER_FREE_CONTROL) { - //cameraSpeed = cameraSpeed * 100; - } else if(PLAYER_UNDER_USER_CONTROL) { - - } - } - if(glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS){ - EntityUtil.getEntityPosition(player).add(new Vector3f(-camera_Current.pos_Center.x,0,-camera_Current.pos_Center.z)); - } - if(glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS){ - EntityUtil.getEntityPosition(player).add(new Vector3f(camera_Current.pos_Center.x,0,camera_Current.pos_Center.z)); - } - if(glfwGetKey(window, GLFW_KEY_D) == GLFW_PRESS){ - EntityUtil.getEntityPosition(player).add(new Vector3f(-camera_Current.pos_Center.x,0,-camera_Current.pos_Center.z).rotateY((float)(-90 * Math.PI / 180))); - } - if(glfwGetKey(window, GLFW_KEY_A) == GLFW_PRESS){ - EntityUtil.getEntityPosition(player).add(new Vector3f(-camera_Current.pos_Center.x,0,-camera_Current.pos_Center.z).rotateY((float)(90 * Math.PI / 180))); - } - if(glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS){ - EntityUtil.getEntityPosition(player).add(new Vector3f(0,0.6f,0)); - } - if(glfwGetKey(window, GLFW_KEY_LEFT_CONTROL) == GLFW_PRESS){ - EntityUtil.getEntityPosition(player).add(new Vector3f(0,-0.6f,0)); - } - - -// camera_player_chase.pos_Center = new Vector3f(EntityUtil.getEntityPosition(player)).sub(EntityUtil.getEntityRotation(player).transform(new Vector3f(-1,1,0))); - - Globals.camera_visible.apply_camera(camera_player_chase); - - Globals.viewMatrix = Globals.camera_visible.get_view_matrix(); - Globals.viewMatrix = new Matrix4f().setLookAt(camera_Current.pos_Center, new Vector3f(0,0,0), new Vector3f(camera_Current.pos_Center).add(new Vector3f(0,1.0f,0))).scale(1.0f, 1.5f, 1.0f); - - //Sets the background color. - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - - - // - // Draw all entities - // - Iterator entity_iterator = Globals.drawable_list.iterator(); - while(entity_iterator.hasNext()){ - Entity currentEntity = entity_iterator.next(); - Model currentModel = EntityUtil.getEntityModel(currentEntity); - currentModel.modelMatrix = new Matrix4f(); - currentModel.modelMatrix.translate(new Vector3f(EntityUtil.getEntityPosition(currentEntity)).sub(EntityUtil.getEntityPosition(player))); - currentModel.modelMatrix.rotate(EntityUtil.getEntityRotation(currentEntity)); - currentModel.modelMatrix.scale(EntityUtil.getEntityScale(currentEntity)); - currentModel.draw(); - } - - - - //check and call events and swap the buffers - glfwSwapBuffers(window); - glfwPollEvents(); - } - //Terminate the program. - glfwTerminate(); - } - - static void sleep(int i) { - try { - TimeUnit.MILLISECONDS.sleep(i); - } catch (InterruptedException ex) { - System.out.println("Sleep somehow interrupted?!"); - } - } - - - - - - - - - - public static void create_opengl_context(){ - //Sets the variables that control the window sizing - int screenWidth = 1920; - int screenHeight = 1080; - //Initializes opengl - glfwInit(); - //Gives hints to glfw to control how opengl will be used - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - //Creates the window reference object - window = glfwCreateWindow(screenWidth, screenHeight, "LearnOpenGL", NULL, NULL); - //Errors for failure to create window (IE: No GUI mode on linux ?) - if (window == NULL) { - System.out.println("Failed to make window."); - glfwTerminate(); - } - //Makes the window that was just created the current OS-level window context - glfwMakeContextCurrent(window); - //Maximize it - glfwMaximizeWindow(window); - //Creates the OpenGL capabilities for the program. - GL.createCapabilities(); - - //This enables Z-buffering so that farther-back polygons are not drawn over nearer ones - glEnable(GL_DEPTH_TEST); - - // Support for transparency - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - //Hide the cursor and capture it - glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); - - - - - - //Points the texture uniforms in the shader programs at the correct variables - - - - - // - // Projection and View matrix creation - // - Globals.projectionMatrix = new Matrix4f(); - Globals.viewMatrix = new Matrix4f(); - float FOV = (float)(120.0f * Math.PI /180.0f); - Globals.projectionMatrix.setPerspective(FOV, 1.0f, 0.1f, view_Range); - Globals.viewMatrix.translation(new Vector3f(0.0f,0.0f,-3.0f)); - } - - - public static void update_mouse_variables(){ - glfwGetCursorPos(window, mouse_X_Buffer, mouse_Y_Buffer); - xpos = mouse_X_Buffer[0]; - ypos = mouse_Y_Buffer[0]; - float xoffset = (float) (xpos - mouse_lastX) * mouseSensitivity; - float yoffset = (float) (mouse_lastY - ypos) * mouseSensitivity; - mouse_lastX = (float) xpos; - mouse_lastY = (float) ypos; - - yaw = yaw + xoffset; - pitch = pitch - yoffset; - - if (pitch > 100.0f) { - pitch = 100.0f; - } - if (pitch < -99.0f) { - pitch = -99.0f; - } - } - - static void init_skybox(){ - Model skyboxModel = RenderUtils.createSkyboxModel(null); - Entity skyboxEntity = EntityUtil.spawnDrawableEntity(skyboxModel); - EntityUtil.getEntityScale(skyboxEntity).mul(100); - - - Globals.skybox_colors.add(new Vector3f(200,200,160)); - Globals.skybox_colors.add(new Vector3f(200,200,160)); - Globals.skybox_colors.add(new Vector3f(200,100,50)); - Globals.skybox_colors.add(new Vector3f(200,100,50)); - Globals.skybox_colors.add(new Vector3f(50,100,150)); - Globals.skybox_colors.add(new Vector3f(50,100,150)); - Globals.skybox_colors.add(new Vector3f(10,10,10)); - Globals.skybox_colors.add(new Vector3f(10,10,10)); - } - - - //I swear it's a temporary function - /* - for(int angle = 0; angle < 45; angle=angle+2){ - for(int radius = 115; radius < 130; radius=radius+2){ - */ -// static float[] getTreePos(){ -// return new float[]{ -// 115.0f,7.0f,0.0f, -// 110.0f,7.0f,10.0f, -// -// 82.0f,7.0f,82.0f, -// }; -// } - - static void initWorld(){ - Model building_model = ModelLoader.load_Model_From_File("Models/arcdock5deg1Try2.fbx"); - Texture whiteTexture = new Texture("Textures/w1.png"); - Material whiteMaterial = new Material(); - whiteMaterial.set_diffuse(whiteTexture); - whiteMaterial.set_specular(whiteTexture); - building_model.meshes.get(0).set_material(whiteMaterial); - for(int i = 0; i < 36; i++){ - Entity arcCurrent = EntityUtil.spawnDrawableEntity(building_model); - float angleRad = i * 10; - float angleDeg = (float)(angleRad * Math.PI / 180); - float posX = (float)(Math.cos(angleDeg) * 100); - float posY = (float)(Math.sin(angleDeg) * 100); - EntityUtil.getEntityPosition(arcCurrent).set(posX, 0.01f, posY); - EntityUtil.getEntityScale(arcCurrent).set(1f); - EntityUtil.getEntityRotation(arcCurrent) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)((180-angleRad) * Math.PI / 180)) - ; - arcCurrent = EntityUtil.spawnDrawableEntity(building_model); - angleRad = i * 10 + 5; - angleDeg = (float)(angleRad * Math.PI / 180); - posX = (float)(Math.cos(angleDeg) * 100); - posY = (float)(Math.sin(angleDeg) * 100); - EntityUtil.getEntityPosition(arcCurrent).set(posX, 5.01f, posY); - EntityUtil.getEntityScale(arcCurrent).set(1f); - EntityUtil.getEntityRotation(arcCurrent) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)((180-angleRad) * Math.PI / 180)) - ; - } - - - Model dirtPlane = ModelLoader.load_Model_From_File("Models/groundplanemassiveuv.fbx"); - Texture dirtTexture = new Texture("Textures/Ground/Dirt1.png"); - Material dirtMaterial = new Material(); - dirtMaterial.set_diffuse(dirtTexture); - dirtMaterial.set_specular(dirtTexture); - dirtPlane.meshes.get(0).set_material(dirtMaterial); - for(int x = -120; x < 120; x=x+20){ - for(int y = -120; y < 120; y=y+20){ - Entity dirtPlaneEntity = EntityUtil.spawnDrawableEntity(dirtPlane); - EntityUtil.getEntityPosition(dirtPlaneEntity).set(x, -1.0f, y); - EntityUtil.getEntityScale(dirtPlaneEntity).set(10f); - EntityUtil.getEntityRotation(dirtPlaneEntity) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - ; - } - } - - Model tree2 = ModelLoader.load_Model_From_File("Models/tree2.fbx"); - Texture leavesTexture = new Texture("Textures/leaves.png"); - Material leavesMaterial = new Material(); - leavesMaterial.set_diffuse(leavesTexture); - leavesMaterial.set_specular(leavesTexture); - Texture trunkTexture = new Texture("Textures/trunk.png"); - Material trunkMaterial = new Material(); - trunkMaterial.set_diffuse(trunkTexture); - trunkMaterial.set_specular(trunkTexture); - tree2.meshes.get(0).set_material(trunkMaterial); - tree2.meshes.get(1).set_material(leavesMaterial); - tree2.meshes.get(2).set_material(leavesMaterial); - Random treeRand = new Random(); - - ArrayList treeList = new ArrayList(); - for(int angle = -105; angle < 45; angle=angle+2){ - for(int radius = 115; radius < 140; radius=radius+2){ - Entity treeEntity = EntityUtil.spawnDrawableEntity(tree2); - EntityUtil.getEntityPosition(treeEntity).set( - (float)Math.cos(angle * Math.PI / 180) * radius + (treeRand.nextFloat() - 0.5f) * 2, - radius - 113 + treeRand.nextFloat(), - (float)Math.sin(angle * Math.PI / 180) * radius + (treeRand.nextFloat() - 0.5f) * 2 - ); - EntityUtil.getEntityScale(treeEntity).set(1f); - EntityUtil.getEntityRotation(treeEntity) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)((treeRand.nextFloat() * 359) * Math.PI / 180)) - ; - treeList.add(treeEntity); - } - } -// float[] treepos = getTreePos(); -// for(int i = 0; i < treepos.length/3; i++){ -// float posX = treepos[i*3]; -// float posY = treepos[i*3+1]; -// float posZ = treepos[i*3+2]; -// Entity treeEntity = EntityUtil.spawnDrawableEntity(tree2); -// EntityUtil.getEntityPosition(treeEntity).set(posX,posY,posZ); -// EntityUtil.getEntityScale(treeEntity).set(1f); -// EntityUtil.getEntityRotation(treeEntity) -// .identity() -// .rotateLocalX((float)(-Math.PI / 2)) -// .rotateLocalY((float)((treeRand.nextFloat() * 359) * Math.PI / 180)) -// ; -// treeList.add(treeEntity); -// } - - Model arenaSpire = ModelLoader.load_Model_From_File("Models/ArenaSpire1.fbx"); - arenaSpire.meshes.get(0).set_material(whiteMaterial); - Entity spireEntity = EntityUtil.spawnDrawableEntity(arenaSpire); - EntityUtil.getEntityRotation(spireEntity) - .identity() - .rotateLocalZ((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(220) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(spireEntity).set(-105, 0, 0); - - Model railTrackModel = ModelLoader.load_Model_From_File("Models/RailTrack1Part1.fbx"); - Texture railTrackTexture = new Texture("Textures/RailTrack1Part1.png"); - Material railTrackMaterial = new Material(); - railTrackMaterial.set_diffuse(railTrackTexture); - railTrackMaterial.set_specular(railTrackTexture); - railTrackModel.meshes.get(0).set_material(railTrackMaterial); - Entity railTrackEntity = EntityUtil.spawnDrawableEntity(railTrackModel); - EntityUtil.getEntityRotation(railTrackEntity) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(0) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(railTrackEntity).set(-15, 10, -20); - - Model railSupportModel = ModelLoader.load_Model_From_File("Models/MonorailSupport.fbx"); - Texture railSupportTexture = new Texture("Textures/MonorailSupport.png"); - Material railSupportMaterial = new Material(); - railSupportMaterial.set_diffuse(railSupportTexture); - railSupportMaterial.set_specular(railSupportTexture); - railSupportModel.meshes.get(0).set_material(railSupportMaterial); - - //support 1 - Entity railSupport1 = EntityUtil.spawnDrawableEntity(railSupportModel); - EntityUtil.getEntityRotation(railSupport1) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(180) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(railSupport1).set(0, -71.5f, -125); - - //support 2 - Entity railSupport2 = EntityUtil.spawnDrawableEntity(railSupportModel); - EntityUtil.getEntityRotation(railSupport2) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(200) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(railSupport2).set(30, -69.5f, -115); - - //support 3 - Entity railSupport3 = EntityUtil.spawnDrawableEntity(railSupportModel); - EntityUtil.getEntityRotation(railSupport3) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(217) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(railSupport3).set(62, -65.5f, -95); - - //support 4 - Entity railSupport4 = EntityUtil.spawnDrawableEntity(railSupportModel); - EntityUtil.getEntityRotation(railSupport4) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(222) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(railSupport4).set(90, -61f, -70); - - //support 5 - Entity railSupport5 = EntityUtil.spawnDrawableEntity(railSupportModel); - EntityUtil.getEntityRotation(railSupport5) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(235) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(railSupport5).set(121, -57.5f, -25); - - //support 6 - Entity railSupport6 = EntityUtil.spawnDrawableEntity(railSupportModel); - EntityUtil.getEntityRotation(railSupport6) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(265) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(railSupport6).set(135, -58.5f, 30); - - - Model tallBuildingModel = ModelLoader.load_Model_From_File("Models/tallbuilding1.fbx"); - tallBuildingModel.meshes.get(0).set_material(whiteMaterial); - Entity tallBuildingEntity1 = EntityUtil.spawnDrawableEntity(tallBuildingModel); - EntityUtil.getEntityRotation(tallBuildingEntity1) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(0) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(tallBuildingEntity1).set(200, 0.0f, -80); - EntityUtil.getEntityScale(tallBuildingEntity1).set(0.6f, 0.6f, 1f); - - Entity tallBuildingEntity2 = EntityUtil.spawnDrawableEntity(tallBuildingModel); - EntityUtil.getEntityRotation(tallBuildingEntity2) - .identity() - .rotateLocalX((float)(-Math.PI / 2)) - .rotateLocalY((float)(-(35) * Math.PI / 180)) - ; - EntityUtil.getEntityPosition(tallBuildingEntity2).set(190, 10.0f, 10.0f); - EntityUtil.getEntityScale(tallBuildingEntity2).set(0.5f, 0.5f, 1f); - } - -} diff --git a/src/main/resources/Models/ArenaSpire1.fbx b/src/main/resources/Models/ArenaSpire1.fbx deleted file mode 100644 index d2f5894d..00000000 Binary files a/src/main/resources/Models/ArenaSpire1.fbx and /dev/null differ diff --git a/src/main/resources/Models/MonorailSupport.fbx b/src/main/resources/Models/MonorailSupport.fbx deleted file mode 100644 index 26d349f3..00000000 Binary files a/src/main/resources/Models/MonorailSupport.fbx and /dev/null differ diff --git a/src/main/resources/Models/RailTrack1Part1.fbx b/src/main/resources/Models/RailTrack1Part1.fbx deleted file mode 100644 index c9877c2d..00000000 Binary files a/src/main/resources/Models/RailTrack1Part1.fbx and /dev/null differ diff --git a/src/main/resources/Models/arcdock5deg1Try2.fbx b/src/main/resources/Models/arcdock5deg1Try2.fbx deleted file mode 100644 index b17f32c1..00000000 Binary files a/src/main/resources/Models/arcdock5deg1Try2.fbx and /dev/null differ diff --git a/src/main/resources/Models/arcdock5deg1notex.fbx b/src/main/resources/Models/arcdock5deg1notex.fbx deleted file mode 100644 index 95e858d6..00000000 Binary files a/src/main/resources/Models/arcdock5deg1notex.fbx and /dev/null differ diff --git a/src/main/resources/Models/plane.fbx b/src/main/resources/Models/plane.fbx deleted file mode 100644 index 7c2ca253..00000000 Binary files a/src/main/resources/Models/plane.fbx and /dev/null differ diff --git a/src/main/resources/Models/skyscraper1.fbx b/src/main/resources/Models/skyscraper1.fbx deleted file mode 100644 index 1f6d3437..00000000 Binary files a/src/main/resources/Models/skyscraper1.fbx and /dev/null differ diff --git a/src/main/resources/Models/tallbuilding1.fbx b/src/main/resources/Models/tallbuilding1.fbx deleted file mode 100644 index 162ce0f5..00000000 Binary files a/src/main/resources/Models/tallbuilding1.fbx and /dev/null differ diff --git a/src/main/resources/Shaders/FragmentShader.fs b/src/main/resources/Shaders/FragmentShader.fs index 06a3b4ea..96895063 100644 --- a/src/main/resources/Shaders/FragmentShader.fs +++ b/src/main/resources/Shaders/FragmentShader.fs @@ -1,6 +1,6 @@ -#version 430 core +#version 330 core out vec4 FragColor; struct Material { diff --git a/src/main/resources/Shaders/VertexShader.vs b/src/main/resources/Shaders/VertexShader.vs index be244168..98298a35 100644 --- a/src/main/resources/Shaders/VertexShader.vs +++ b/src/main/resources/Shaders/VertexShader.vs @@ -1,5 +1,5 @@ //Vertex Shader -#version 430 core +#version 330 core diff --git a/src/main/resources/Shaders/VertexShaderNoBones.vs b/src/main/resources/Shaders/VertexShaderNoBones.vs index a7060dd9..98863f18 100644 --- a/src/main/resources/Shaders/VertexShaderNoBones.vs +++ b/src/main/resources/Shaders/VertexShaderNoBones.vs @@ -1,5 +1,5 @@ //Vertex Shader -#version 430 core +#version 330 core diff --git a/src/main/resources/Shaders/skybox/FragmentShaderNoTexture.fs b/src/main/resources/Shaders/skybox/FragmentShaderNoTexture.fs index 37c682b3..738ffe92 100644 --- a/src/main/resources/Shaders/skybox/FragmentShaderNoTexture.fs +++ b/src/main/resources/Shaders/skybox/FragmentShaderNoTexture.fs @@ -1,6 +1,6 @@ -#version 430 core +#version 330 core out vec4 FragColor; diff --git a/src/main/resources/Shaders/skybox/VertexShaderNoTexture.vs b/src/main/resources/Shaders/skybox/VertexShaderNoTexture.vs index a01f7301..021ad22b 100644 --- a/src/main/resources/Shaders/skybox/VertexShaderNoTexture.vs +++ b/src/main/resources/Shaders/skybox/VertexShaderNoTexture.vs @@ -1,5 +1,5 @@ //Vertex Shader -#version 430 core +#version 330 core diff --git a/src/main/resources/Textures/Ground/Road1.png b/src/main/resources/Textures/Ground/Road1.png deleted file mode 100644 index 5c85eea9..00000000 Binary files a/src/main/resources/Textures/Ground/Road1.png and /dev/null differ diff --git a/src/main/resources/Textures/Ground/RoadIntersection1.png b/src/main/resources/Textures/Ground/RoadIntersection1.png deleted file mode 100644 index 3949c97d..00000000 Binary files a/src/main/resources/Textures/Ground/RoadIntersection1.png and /dev/null differ diff --git a/src/main/resources/Textures/MonorailSupport.png b/src/main/resources/Textures/MonorailSupport.png deleted file mode 100644 index 94f7b356..00000000 Binary files a/src/main/resources/Textures/MonorailSupport.png and /dev/null differ diff --git a/src/main/resources/Textures/RailTrack1Part1.png b/src/main/resources/Textures/RailTrack1Part1.png deleted file mode 100644 index 23fd05e7..00000000 Binary files a/src/main/resources/Textures/RailTrack1Part1.png and /dev/null differ diff --git a/src/main/resources/Textures/Spaceplane.png b/src/main/resources/Textures/Spaceplane.png deleted file mode 100644 index 90b7626c..00000000 Binary files a/src/main/resources/Textures/Spaceplane.png and /dev/null differ diff --git a/src/main/resources/Textures/SpaceplaneSpecular.png b/src/main/resources/Textures/SpaceplaneSpecular.png deleted file mode 100644 index 801ec85e..00000000 Binary files a/src/main/resources/Textures/SpaceplaneSpecular.png and /dev/null differ diff --git a/src/main/resources/Textures/skyscraper1_diffuse.png b/src/main/resources/Textures/skyscraper1_diffuse.png deleted file mode 100644 index f58d3bc2..00000000 Binary files a/src/main/resources/Textures/skyscraper1_diffuse.png and /dev/null differ