diff --git a/assets/Materials/Generated/grass-Material_001.j3m b/assets/Materials/Generated/grass-Material_001.j3m new file mode 100644 index 0000000..4ce50fe --- /dev/null +++ b/assets/Materials/Generated/grass-Material_001.j3m @@ -0,0 +1,23 @@ +Material MyMaterial : Common/MatDefs/Light/Lighting.j3md { + MaterialParameters { + DiffuseMap : Models/grass.png + GlowColor : 0.0 0.0 0.0 1.0 + Specular : 0.0 0.0 0.0 1.0 + Diffuse : 0.9258238 0.9258238 0.9258238 1.0 + UseMaterialColors : true + ParallaxHeight : 0.05 + Ambient : 0.9258238 0.9258238 0.9258238 1.0 + Shininess : 12.5 + } + AdditionalRenderState { + FaceCull Off + Wireframe Off + DepthWrite On + PolyOffset 0.0 0.0 + AlphaTestFalloff 0.0 + Blend PremultAlpha + PointSprite Off + ColorWrite On + DepthTest On + } +} diff --git a/assets/Models/grass.j3o b/assets/Models/grass.j3o new file mode 100644 index 0000000..1835069 Binary files /dev/null and b/assets/Models/grass.j3o differ diff --git a/assets/Models/grass.j3odata b/assets/Models/grass.j3odata new file mode 100644 index 0000000..4542457 --- /dev/null +++ b/assets/Models/grass.j3odata @@ -0,0 +1,3 @@ +# +#Fri Jan 27 21:02:15 CET 2017 +ORIGINAL_PATH=Models/grass.scene diff --git a/assets/Models/grass.png b/assets/Models/grass.png new file mode 100644 index 0000000..61ba102 Binary files /dev/null and b/assets/Models/grass.png differ diff --git a/nbproject/project.properties b/nbproject/project.properties index b99bb78..d620c8a 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -41,7 +41,8 @@ javac.classpath=\ ${libs.jme3-test-data.classpath}:\ ${libs.jme3-libraries-oggvorbis.classpath}:\ ${libs.jme3-libraries-lwjgl-minimum.classpath}:\ - ${libs.jme3-libraries-terrain.classpath} + ${libs.jme3-libraries-terrain.classpath}:\ + ${libs.jme3-libraries-effects.classpath} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/screenshot.png b/screenshot.png index e8a407d..dd77fc8 100644 Binary files a/screenshot.png and b/screenshot.png differ diff --git a/src/roadtrip/RoadTrip.java b/src/roadtrip/RoadTrip.java index 1d1078f..b78ee75 100644 --- a/src/roadtrip/RoadTrip.java +++ b/src/roadtrip/RoadTrip.java @@ -10,6 +10,8 @@ import com.jme3.light.AmbientLight; import com.jme3.light.DirectionalLight; import com.jme3.material.Material; import com.jme3.math.*; +import com.jme3.post.FilterPostProcessor; +import com.jme3.post.filters.DepthOfFieldFilter; import com.jme3.scene.Geometry; import com.jme3.scene.Node; import com.jme3.scene.Spatial; @@ -53,6 +55,9 @@ public class RoadTrip extends GameApplication implements ActionListener { int score = 0; + private FilterPostProcessor fpp; + DepthOfFieldFilter dofFilter; + @Override public void initializeGame() { super.initializeGame(); @@ -101,6 +106,16 @@ public class RoadTrip extends GameApplication implements ActionListener { chaseCam = new ChaseCamera(cam, player.node, inputManager); chaseCam.setDefaultDistance(60f); chaseCam.setSmoothMotion(true); + + fpp = new FilterPostProcessor(assetManager); + //fpp.setNumSamples(4); + + dofFilter = new DepthOfFieldFilter(); + dofFilter.setFocusRange(5f); + dofFilter.setFocusDistance(6f); + dofFilter.setBlurScale(0.6f); + fpp.addFilter(dofFilter); + viewPort.addProcessor(fpp); } protected void addGameMenu() @@ -203,6 +218,10 @@ public class RoadTrip extends GameApplication implements ActionListener { Vector3f playerLocation = player.node.getWorldTranslation(); Vector3f newLocation = new Vector3f(playerLocation).add(new Vector3f(-1f, 1.5f, 2.4f).mult(20f)); + float focusDist = cam.getLocation().distance(player.node.getWorldTranslation()) / 10f; + dofFilter.setFocusDistance(focusDist * 1.1f); + dofFilter.setFocusRange(focusDist * 0.9f); + for (VehicleNode vehicle : gameWorldState.vehicles) { vehicle.update(tpf); } diff --git a/src/roadtrip/view/GameWorldView.java b/src/roadtrip/view/GameWorldView.java index 14f8b52..3757415 100644 --- a/src/roadtrip/view/GameWorldView.java +++ b/src/roadtrip/view/GameWorldView.java @@ -12,6 +12,8 @@ import com.jme3.material.Material; import com.jme3.math.ColorRGBA; import com.jme3.math.Vector2f; import com.jme3.math.Vector3f; +import com.jme3.post.FilterPostProcessor; +import com.jme3.post.filters.DepthOfFieldFilter; import com.jme3.renderer.Camera; import com.jme3.scene.Node; import com.jme3.scene.Spatial; @@ -47,7 +49,7 @@ public class GameWorldView { private final Camera camera; private final Node rootNode; private final PhysicsSpace physicsSpace; - + public TerrainView terrain = new TerrainView(new TerrainDataProvider()); public GameWorldView(GameWorldState gameWorldState, AssetManager assetManager, Camera camera, Node rootNode, PhysicsSpace physicsSpace) { @@ -171,12 +173,13 @@ public class GameWorldView { final Spatial treeModel = assetManager.loadModel("Models/tree.j3o"); final Spatial houseModel = assetManager.loadModel("Models/house1.j3o"); + final Spatial grassModel = assetManager.loadModel("Models/grass.j3o"); final FineTerrainGrid terrainGrid = terrain.terrainGrid; terrainGrid.addListener(new TerrainGridListener() { @Override - public void gridMoved(Vector3f newCenter) { + public void gridMoved(Vector3f newCenter) { } @Override @@ -240,10 +243,29 @@ public class GameWorldView { modelPhysics.isActive(); modelInstance.addControl(modelPhysics); modelPhysics.setPhysicsLocation(pos); - physicsSpace.add(modelPhysics); + //physicsSpace.add(modelPhysics); } objects.attachChild(modelInstance); } + + for (int i = 0; i < rand.nextInt(10000); i++) { + Vector3f pos = new Vector3f((rand.nextFloat() - 0.5f) * 128f, 0f, (rand.nextFloat() - 0.5f) * 128f).addLocal(quad.getWorldTranslation()); + pos.addLocal(0f, getHeight(quad, pos), 0f); + Vector3f scale = Vector3f.UNIT_XYZ; + Spatial modelInstance; + switch ("grass") { + case "grass": + modelInstance = grassModel.clone(); + float s = 0.2f + rand.nextFloat() * 2f; + scale = new Vector3f(s, s, s); + break; + default: + throw new RuntimeException("Unhandled object type"); + } + modelInstance.setLocalTranslation(pos); + modelInstance.setLocalScale(scale); + objects.attachChild(modelInstance); + } } @Override