diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 9516ebde..28d465a4 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -2054,6 +2054,7 @@ Properly async-ify inventory/item related tests Fix viewport interaction with lod emitter service Fix most tests Rendering engine legacy code reorganization +Code cleanup work diff --git a/src/main/java/electrosphere/client/ClientState.java b/src/main/java/electrosphere/client/ClientState.java index 125a26d1..680d5af3 100644 --- a/src/main/java/electrosphere/client/ClientState.java +++ b/src/main/java/electrosphere/client/ClientState.java @@ -1,9 +1,5 @@ package electrosphere.client; -import java.util.ArrayList; - -import org.joml.Vector3f; - import electrosphere.client.block.ClientBlockManager; import electrosphere.client.block.cells.ClientBlockCellManager; import electrosphere.client.chemistry.ClientChemistryCollisionCallback; @@ -177,11 +173,6 @@ public class ClientState { */ public Entity targetContainer = null; - //famous fuckin last words, but temporary solution - //global arraylist of values for the skybox colors - //edit(6/1/21): :upside_down_smile: - public ArrayList skyboxColors = new ArrayList(); - /** * The number of open inventories */ diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index 62199084..974adde2 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -293,7 +293,7 @@ public class Globals { //init fluid shader program FluidChunkModelGeneration.fluidChunkShaderProgram = VisualShader.loadSpecificShader("/Shaders/entities/fluid2/fluid2.vs", "/Shaders/entities/fluid2/fluid2.fs"); //init models - assetManager.registerModelWithPath(GeometryModelGen.createUnitsphere(), AssetDataStrings.UNITSPHERE); + assetManager.registerModelWithPath(GeometryModelGen.createUnitSphere(), AssetDataStrings.UNITSPHERE); assetManager.registerModelWithPath(GeometryModelGen.createUnitCylinder(), AssetDataStrings.UNITCYLINDER); assetManager.registerModelWithPath(GeometryModelGen.createUnitCube(), AssetDataStrings.UNITCUBE); assetManager.registerModelWithPath(GeometryModelGen.createBlockSingleModel(), AssetDataStrings.MODEL_BLOCK_SINGLE); diff --git a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java index 91fb6e7e..a66851f5 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java @@ -3,7 +3,6 @@ package electrosphere.engine.loadingthreads; import java.util.concurrent.TimeUnit; import org.joml.Vector3d; -import org.joml.Vector3f; import electrosphere.client.block.cells.ClientBlockCellManager; import electrosphere.client.entity.camera.CameraEntityUtils; @@ -139,7 +138,7 @@ public class ClientLoading { //initialize the basic graphical entities of the world (skybox, camera) initWorldBaseGraphicalEntities(); //init arena specific stuff (ie different skybox colors) - initArenaGraphicalEntities(); + initBaseGraphicalEntities(); //sets micro and macro sims to ready if they exist setSimulationsToReady(); //set simulations to ready if they exist @@ -266,25 +265,10 @@ public class ClientLoading { } - static void initArenaGraphicalEntities(){ - - float skyR = 150; - float skyG = 200; - float skyB = 250; - - float groundR = 20; - float groundG = 20; - float groundB = 20; - - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - + /** + * Initializes the base graphical entities of the engine + */ + static void initBaseGraphicalEntities(){ //starry sky true skybox Entity skybox = EntityCreationUtils.createClientSpatialEntity(); EntityCreationUtils.makeEntityDrawable(skybox, "Models/environment/skyboxSphere.fbx"); @@ -296,33 +280,7 @@ public class ClientLoading { }); Globals.assetManager.queueOverrideMeshShader("Models/environment/skyboxSphere.fbx", "Sphere", "Shaders/entities/skysphere/skysphere.vs", "Shaders/entities/skysphere/skysphere.fs"); - //cloud ring pseudo skybox - // Entity cloudRing = EntityCreationUtils.createClientSpatialEntity(); - // EntityCreationUtils.makeEntityDrawable(cloudRing, "Models/environment/cloudRing.fbx"); - // DrawableUtils.makeEntityTransparent(cloudRing); - // DrawableUtils.disableCulling(cloudRing); - // EntityUtils.getRotation(cloudRing).rotateX((float)(-Math.PI/2.0f)); - // EntityUtils.getScale(cloudRing).mul(100000.0f); - // Globals.clientScene.registerBehaviorTree(new ApplyRotationTree(cloudRing,new Quaterniond().rotationZ(0.0001))); - // Globals.assetManager.queueOverrideMeshShader("Models/environment/cloudRing.fbx", "Sphere", "Shaders/skysphere/skysphere.vs", "Shaders/skysphere/skysphere.fs"); - CursorState.createCursorEntities(); - - //cloud object - // Entity cloudEnt = EntityCreationUtils.createClientSpatialEntity(); - // EntityCreationUtils.makeEntityDrawablePreexistingModel(cloudEnt, Globals.assetManager.queuedAsset(new QueuedModel(() -> { - // Model rVal = new Model(); - - // Mesh m = GeometryMeshGen.genBox(1, 1, 1); - - // //shader logic - // m.setShader(VisualShader.loadSpecificShader("Shaders/entities/clouds/clouds.vs", "Shaders/entities/clouds/clouds.fs")); - // m.setParent(rVal); - - // rVal.getMeshes().add(m); - // rVal.setBoundingSphere(0,0,0,2); - // return rVal; - // }))); } static final int MAX_DRAW_CELL_WAIT = 1000; diff --git a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java index fdae32af..b713bcb8 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java +++ b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java @@ -8,7 +8,6 @@ import java.util.Random; import java.util.stream.Collectors; import org.joml.Vector3d; -import org.joml.Vector3f; import org.joml.Vector3i; import electrosphere.auth.AuthenticationManager; @@ -113,30 +112,10 @@ public class LoadingUtils { /** * Loads graphics assets necessary for the client of the game engine. This should be stuff that is used essentially universally (ie textures for debugging). */ - static void initGameGraphicalEntities(){ - + protected static void initGameGraphicalEntities(){ Globals.assetManager.addTexturePathtoQueue("Textures/transparent_red.png"); Globals.assetManager.addTexturePathtoQueue("Textures/transparent_blue.png"); Globals.assetManager.addTexturePathtoQueue("Textures/transparent_grey.png"); - - - float skyR = 100; - float skyG = 150; - float skyB = 200; - - float groundR = 50; - float groundG = 100; - float groundB = 150; - - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(skyR,skyG,skyB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - Globals.clientState.skyboxColors.add(new Vector3f(groundR,groundG,groundB)); - } diff --git a/src/main/java/electrosphere/renderer/meshgen/GeometryMeshGen.java b/src/main/java/electrosphere/renderer/meshgen/GeometryMeshGen.java index 4d62d864..ab646a5e 100644 --- a/src/main/java/electrosphere/renderer/meshgen/GeometryMeshGen.java +++ b/src/main/java/electrosphere/renderer/meshgen/GeometryMeshGen.java @@ -9,11 +9,19 @@ import org.joml.Vector2f; import org.joml.Vector3d; import org.joml.Vector3f; import org.lwjgl.BufferUtils; +import org.lwjgl.util.par.ParShapes; +import org.lwjgl.util.par.ParShapesMesh; import electrosphere.engine.Globals; +import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.renderer.OpenGLState; +import electrosphere.renderer.model.Material; import electrosphere.renderer.model.Mesh; +import electrosphere.renderer.shader.VisualShader; +/** + * Routines for generating meshes of basic geometry + */ public class GeometryMeshGen { /** @@ -453,4 +461,55 @@ public class GeometryMeshGen { return mesh; } + /** + * Generates a unit sphere model + * @param slices The number of slices of the sphere + * @param stacks The number of stacks of the sphere + * @return The model + */ + public static Mesh createUnitSphere(int slices, int stacks){ + Mesh sphereMesh = new Mesh("sphere"); + OpenGLState openGLState = Globals.renderingEngine.getOpenGLState(); + sphereMesh.generateVAO(openGLState); + + //buffer coords + ParShapesMesh data = ParShapes.par_shapes_create_parametric_sphere(slices, stacks); + int numPoints = data.npoints(); + + //verts + { + FloatBuffer verts = data.points(numPoints * 3); + FloatBuffer vertsFinal = BufferUtils.createFloatBuffer(verts.limit()); //reallocating to BufferUtils buffer to help minimize memory errors + vertsFinal.put(verts); + vertsFinal.flip(); + sphereMesh.bufferVertices(vertsFinal, 3); + } + + //indices + { + IntBuffer indices = data.triangles(data.ntriangles() * 3); + IntBuffer indicesFinal = BufferUtils.createIntBuffer(indices.limit()); //reallocating to BufferUtils buffer to help minimize memory errors + indicesFinal.put(indices); + indicesFinal.flip(); + sphereMesh.bufferFaces(indicesFinal, data.ntriangles() * 3); + } + + //texture coords + { + FloatBuffer texCoords = data.tcoords(numPoints * 2); + FloatBuffer texCoordsFinal = BufferUtils.createFloatBuffer(texCoords.limit()); //reallocating to BufferUtils buffer to help minimize memory errors + texCoordsFinal.put(texCoords); + texCoordsFinal.flip(); + sphereMesh.bufferTextureCoords(texCoordsFinal, 2); + } + + + //setup extra structures + Material mat = Material.createExisting(AssetDataStrings.TEXTURE_TEAL_TRANSPARENT); + sphereMesh.setMaterial(mat); + sphereMesh.setShader(VisualShader.smartAssembleShader()); + + return sphereMesh; + } + } diff --git a/src/main/java/electrosphere/renderer/meshgen/GeometryModelGen.java b/src/main/java/electrosphere/renderer/meshgen/GeometryModelGen.java index 598c25bc..31c8214e 100644 --- a/src/main/java/electrosphere/renderer/meshgen/GeometryModelGen.java +++ b/src/main/java/electrosphere/renderer/meshgen/GeometryModelGen.java @@ -121,7 +121,7 @@ public class GeometryModelGen { * Generates a unit sphere model * @return The model */ - public static Model createUnitsphere(){ + public static Model createUnitSphere(){ Model model = new Model(); Mesh sphereMesh = new Mesh("sphere"); OpenGLState openGLState = Globals.renderingEngine.getOpenGLState();