@@ -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 | |||||
} | |||||
} |
@@ -0,0 +1,3 @@ | |||||
# | |||||
#Fri Jan 27 21:02:15 CET 2017 | |||||
ORIGINAL_PATH=Models/grass.scene |
@@ -41,7 +41,8 @@ javac.classpath=\ | |||||
${libs.jme3-test-data.classpath}:\ | ${libs.jme3-test-data.classpath}:\ | ||||
${libs.jme3-libraries-oggvorbis.classpath}:\ | ${libs.jme3-libraries-oggvorbis.classpath}:\ | ||||
${libs.jme3-libraries-lwjgl-minimum.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 | # Space-separated list of extra javac options | ||||
javac.compilerargs= | javac.compilerargs= | ||||
javac.deprecation=false | javac.deprecation=false | ||||
@@ -10,6 +10,8 @@ import com.jme3.light.AmbientLight; | |||||
import com.jme3.light.DirectionalLight; | import com.jme3.light.DirectionalLight; | ||||
import com.jme3.material.Material; | import com.jme3.material.Material; | ||||
import com.jme3.math.*; | import com.jme3.math.*; | ||||
import com.jme3.post.FilterPostProcessor; | |||||
import com.jme3.post.filters.DepthOfFieldFilter; | |||||
import com.jme3.scene.Geometry; | import com.jme3.scene.Geometry; | ||||
import com.jme3.scene.Node; | import com.jme3.scene.Node; | ||||
import com.jme3.scene.Spatial; | import com.jme3.scene.Spatial; | ||||
@@ -53,6 +55,9 @@ public class RoadTrip extends GameApplication implements ActionListener { | |||||
int score = 0; | int score = 0; | ||||
private FilterPostProcessor fpp; | |||||
DepthOfFieldFilter dofFilter; | |||||
@Override | @Override | ||||
public void initializeGame() { | public void initializeGame() { | ||||
super.initializeGame(); | super.initializeGame(); | ||||
@@ -101,6 +106,16 @@ public class RoadTrip extends GameApplication implements ActionListener { | |||||
chaseCam = new ChaseCamera(cam, player.node, inputManager); | chaseCam = new ChaseCamera(cam, player.node, inputManager); | ||||
chaseCam.setDefaultDistance(60f); | chaseCam.setDefaultDistance(60f); | ||||
chaseCam.setSmoothMotion(true); | 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() | protected void addGameMenu() | ||||
@@ -203,6 +218,10 @@ public class RoadTrip extends GameApplication implements ActionListener { | |||||
Vector3f playerLocation = player.node.getWorldTranslation(); | Vector3f playerLocation = player.node.getWorldTranslation(); | ||||
Vector3f newLocation = new Vector3f(playerLocation).add(new Vector3f(-1f, 1.5f, 2.4f).mult(20f)); | 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) { | for (VehicleNode vehicle : gameWorldState.vehicles) { | ||||
vehicle.update(tpf); | vehicle.update(tpf); | ||||
} | } | ||||
@@ -12,6 +12,8 @@ import com.jme3.material.Material; | |||||
import com.jme3.math.ColorRGBA; | import com.jme3.math.ColorRGBA; | ||||
import com.jme3.math.Vector2f; | import com.jme3.math.Vector2f; | ||||
import com.jme3.math.Vector3f; | import com.jme3.math.Vector3f; | ||||
import com.jme3.post.FilterPostProcessor; | |||||
import com.jme3.post.filters.DepthOfFieldFilter; | |||||
import com.jme3.renderer.Camera; | import com.jme3.renderer.Camera; | ||||
import com.jme3.scene.Node; | import com.jme3.scene.Node; | ||||
import com.jme3.scene.Spatial; | import com.jme3.scene.Spatial; | ||||
@@ -47,7 +49,7 @@ public class GameWorldView { | |||||
private final Camera camera; | private final Camera camera; | ||||
private final Node rootNode; | private final Node rootNode; | ||||
private final PhysicsSpace physicsSpace; | private final PhysicsSpace physicsSpace; | ||||
public TerrainView terrain = new TerrainView(new TerrainDataProvider()); | public TerrainView terrain = new TerrainView(new TerrainDataProvider()); | ||||
public GameWorldView(GameWorldState gameWorldState, AssetManager assetManager, Camera camera, Node rootNode, PhysicsSpace physicsSpace) { | 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 treeModel = assetManager.loadModel("Models/tree.j3o"); | ||||
final Spatial houseModel = assetManager.loadModel("Models/house1.j3o"); | final Spatial houseModel = assetManager.loadModel("Models/house1.j3o"); | ||||
final Spatial grassModel = assetManager.loadModel("Models/grass.j3o"); | |||||
final FineTerrainGrid terrainGrid = terrain.terrainGrid; | final FineTerrainGrid terrainGrid = terrain.terrainGrid; | ||||
terrainGrid.addListener(new TerrainGridListener() { | terrainGrid.addListener(new TerrainGridListener() { | ||||
@Override | @Override | ||||
public void gridMoved(Vector3f newCenter) { | |||||
public void gridMoved(Vector3f newCenter) { | |||||
} | } | ||||
@Override | @Override | ||||
@@ -240,10 +243,29 @@ public class GameWorldView { | |||||
modelPhysics.isActive(); | modelPhysics.isActive(); | ||||
modelInstance.addControl(modelPhysics); | modelInstance.addControl(modelPhysics); | ||||
modelPhysics.setPhysicsLocation(pos); | modelPhysics.setPhysicsLocation(pos); | ||||
physicsSpace.add(modelPhysics); | |||||
//physicsSpace.add(modelPhysics); | |||||
} | } | ||||
objects.attachChild(modelInstance); | 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 | @Override | ||||