From 09341af70cdcaa2c8456b3810a0feb90815aa6bc Mon Sep 17 00:00:00 2001 From: austin Date: Sat, 7 Sep 2024 14:03:26 -0400 Subject: [PATCH] par shapes work --- buildNumber.properties | 4 +- pom.xml | 14 +++++ .../java/electrosphere/engine/Globals.java | 8 +-- .../engine/assetmanager/AssetDataStrings.java | 8 +++ .../engine/loadingthreads/ClientLoading.java | 3 +- .../electrosphere/renderer/RenderUtils.java | 60 +++++++++++++++++++ .../pipelines/debug/DebugBonesPipeline.java | 3 +- .../pipelines/debug/DebugContentPipeline.java | 5 +- 8 files changed, 93 insertions(+), 12 deletions(-) diff --git a/buildNumber.properties b/buildNumber.properties index cbe49a67..7640da63 100644 --- a/buildNumber.properties +++ b/buildNumber.properties @@ -1,3 +1,3 @@ #maven.buildNumber.plugin properties file -#Wed Sep 04 09:33:29 EDT 2024 -buildNumber=320 +#Sat Sep 07 08:28:40 EDT 2024 +buildNumber=324 diff --git a/pom.xml b/pom.xml index b8683460..23653a4a 100644 --- a/pom.xml +++ b/pom.xml @@ -125,6 +125,20 @@ ${lwjgl.version} ${lwjgl.natives} + + + + + org.lwjgl + lwjgl-par + ${lwjgl.version} + + + org.lwjgl + lwjgl-par + ${lwjgl.version} + ${lwjgl.natives} + diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index 718189a5..cafd87af 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -602,13 +602,9 @@ public class Globals { //init fluid shader program FluidChunkModelGeneration.fluidChunkShaderProgram = ShaderProgram.loadSpecificShader("/Shaders/entities/fluid2/fluid2.vs", "/Shaders/entities/fluid2/fluid2.fs"); //init models - assetManager.addModelPathToQueue("Models/basic/geometry/unitsphere.glb"); - assetManager.addModelPathToQueue("Models/basic/geometry/unitsphere.fbx"); - assetManager.addModelPathToQueue("Models/basic/geometry/unitsphere_1.fbx"); - assetManager.addModelPathToQueue("Models/basic/geometry/unitsphere_grey.fbx"); + assetManager.registerModelToSpecificString(RenderUtils.createUnitsphere(), AssetDataStrings.UNITSPHERE); + assetManager.registerModelToSpecificString(RenderUtils.createUnitCylinder(), AssetDataStrings.UNITCYLINDER); assetManager.addModelPathToQueue("Models/basic/geometry/SmallCube.fbx"); - assetManager.addModelPathToQueue("Models/basic/geometry/unitcylinder.fbx"); - assetManager.addModelPathToQueue("Models/basic/geometry/unitcylinder.glb"); assetManager.addModelPathToQueue("Models/basic/geometry/unitcapsule.glb"); assetManager.addModelPathToQueue("Models/basic/geometry/unitplane.fbx"); assetManager.addModelPathToQueue("Models/basic/geometry/unitcube.fbx"); diff --git a/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java b/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java index 921e7003..97e9b5ac 100644 --- a/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java +++ b/src/main/java/electrosphere/engine/assetmanager/AssetDataStrings.java @@ -8,4 +8,12 @@ public class AssetDataStrings { public static final String ASSET_STRING_SKYBOX_BASIC = "skyboxBasic"; public static final String BITMAP_CHARACTER_MODEL = "bitmapCharacterModel"; public static final String LEAVES_MODEL = "leaves"; + + /** + * The basic geometry of the engine + */ + public static final String UNITSPHERE = "unitSphere"; + public static final String UNITCYLINDER = "unitCylinder"; + + } diff --git a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java index 383ab5f8..eb2db49e 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java @@ -11,6 +11,7 @@ import electrosphere.client.targeting.crosshair.Crosshair; import electrosphere.client.terrain.cells.DrawCellManager; import electrosphere.controls.ControlHandler; import electrosphere.engine.Globals; +import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.engine.signal.Signal.SignalType; import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.entity.DrawableUtils; @@ -244,7 +245,7 @@ public class ClientLoading { //player's cursor Globals.playerCursor = EntityCreationUtils.createClientSpatialEntity(); - EntityCreationUtils.makeEntityDrawable(Globals.playerCursor, "Models/basic/geometry/unitsphere_1.fbx"); + EntityCreationUtils.makeEntityDrawable(Globals.playerCursor, AssetDataStrings.UNITSPHERE); DrawableUtils.makeEntityTransparent(Globals.playerCursor); EntityUtils.getScale(Globals.playerCursor).set(30f); } diff --git a/src/main/java/electrosphere/renderer/RenderUtils.java b/src/main/java/electrosphere/renderer/RenderUtils.java index 5dbcbd70..98e6e020 100644 --- a/src/main/java/electrosphere/renderer/RenderUtils.java +++ b/src/main/java/electrosphere/renderer/RenderUtils.java @@ -20,6 +20,8 @@ import org.lwjgl.BufferUtils; import static org.lwjgl.opengl.GL11.GL_FLOAT; import org.lwjgl.opengl.GL40; +import org.lwjgl.util.par.ParShapes; +import org.lwjgl.util.par.ParShapesMesh; /** * Utilities to assist with rendering @@ -339,6 +341,64 @@ public class RenderUtils { return rVal; } + /** + * Generates a unit sphere model + * @return The model + */ + public static Model createUnitsphere(){ + Model model = new Model(); + Mesh sphereMesh = new Mesh("sphere"); + sphereMesh.generateVAO(); + + //buffer coords + ParShapesMesh data = ParShapes.par_shapes_create_parametric_sphere(10, 5); + int numPoints = data.npoints(); + FloatBuffer verts = data.points(numPoints * 3); + sphereMesh.bufferVertices(verts, 3); + FloatBuffer texCoords = data.tcoords(numPoints * 3); + sphereMesh.bufferTextureCoords(texCoords, 2); + + //setup extra structures + Material mat = new Material(); + mat.set_diffuse("Textures/color/transparent_teal.png"); + sphereMesh.setMaterial(mat); + sphereMesh.setShader(ShaderProgram.smart_assemble_shader(false, true)); + GL40.glBindVertexArray(0); + sphereMesh.setParent(model); + model.getMeshes().add(sphereMesh); + + return model; + } + + /** + * Creates a unit cylinder model + * @return The model + */ + public static Model createUnitCylinder(){ + Model model = new Model(); + Mesh sphereMesh = new Mesh("cylinder"); + sphereMesh.generateVAO(); + + //buffer coords + ParShapesMesh data = ParShapes.par_shapes_create_cylinder(10, 2); + int numPoints = data.npoints(); + FloatBuffer verts = data.points(numPoints * 3); + sphereMesh.bufferVertices(verts, 3); + FloatBuffer texCoords = data.tcoords(numPoints * 2); + sphereMesh.bufferTextureCoords(texCoords, 2); + + //setup extra structures + Material mat = new Material(); + mat.set_diffuse("Textures/color/transparent_teal.png"); + sphereMesh.setMaterial(mat); + sphereMesh.setShader(ShaderProgram.smart_assemble_shader(false, true)); + GL40.glBindVertexArray(0); + sphereMesh.setParent(model); + model.getMeshes().add(sphereMesh); + + return model; + } + @Deprecated public static Model createBitmapDisplay(){ diff --git a/src/main/java/electrosphere/renderer/pipelines/debug/DebugBonesPipeline.java b/src/main/java/electrosphere/renderer/pipelines/debug/DebugBonesPipeline.java index c699d208..0ea79ff9 100644 --- a/src/main/java/electrosphere/renderer/pipelines/debug/DebugBonesPipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/debug/DebugBonesPipeline.java @@ -7,6 +7,7 @@ import org.joml.Vector3f; import org.lwjgl.opengl.GL40; import electrosphere.engine.Globals; +import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.entity.Entity; import electrosphere.entity.EntityUtils; import electrosphere.entity.types.camera.CameraEntityUtils; @@ -68,7 +69,7 @@ public class DebugBonesPipeline implements RenderPipeline { //Get target data // Actor targetActor = EntityUtils.getActor(targetEntity); - Model boneModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitcylinder.fbx"); + Model boneModel = Globals.assetManager.fetchModel(AssetDataStrings.UNITCYLINDER); boneModel.getMaterials().get(0).set_diffuse(Globals.textureDiffuseDefault); for(Bone bone : targetActor.getBoneValues()){ Vector3d bonePos = MathBones.getBoneWorldPosition(targetEntity, bone.boneID); diff --git a/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java b/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java index 37947f84..c0ab8724 100644 --- a/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/debug/DebugContentPipeline.java @@ -13,6 +13,7 @@ import org.ode4j.ode.DSphere; import electrosphere.collision.PhysicsUtils; import electrosphere.collision.collidable.Collidable; import electrosphere.engine.Globals; +import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; @@ -78,7 +79,7 @@ public class DebugContentPipeline implements RenderPipeline { if(geom instanceof DSphere){ DSphere sphereView = (DSphere)geom; HitboxState shapeStatus = hitboxState.getShapeStatus(geom); - if((hitboxModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitsphere.glb")) != null){ + if((hitboxModel = Globals.assetManager.fetchModel(AssetDataStrings.UNITSPHERE)) != null){ //set color based on collision status, type, etc Texture texture = Globals.assetManager.fetchTexture(getHitboxColor(shapeStatus,shapeStatus.getHitboxData())); if(texture != null){ @@ -133,7 +134,7 @@ public class DebugContentPipeline implements RenderPipeline { if(geom instanceof DSphere){ DSphere sphereView = (DSphere)geom; HitboxState shapeStatus = hitboxState.getShapeStatus(geom); - if((hitboxModel = Globals.assetManager.fetchModel("Models/basic/geometry/unitsphere.glb")) != null){ + if((hitboxModel = Globals.assetManager.fetchModel(AssetDataStrings.UNITSPHERE)) != null){ //set color based on collision status, type, etc Texture texture = Globals.assetManager.fetchTexture(getHitboxColor(shapeStatus,shapeStatus.getHitboxData())); if(texture != null){