1
0
mirror of https://github.com/Dejvino/roadtrip synced 2024-12-22 03:48:48 +00:00

Map: added grass and depth-of-field filter.

This commit is contained in:
Dejvino 2017-01-28 00:47:11 +01:00
parent 94faf05d7e
commit a32565ef00
8 changed files with 72 additions and 4 deletions

View File

@ -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
}
}

BIN
assets/Models/grass.j3o Normal file

Binary file not shown.

View File

@ -0,0 +1,3 @@
#
#Fri Jan 27 21:02:15 CET 2017
ORIGINAL_PATH=Models/grass.scene

BIN
assets/Models/grass.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 773 KiB

After

Width:  |  Height:  |  Size: 706 KiB

View File

@ -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);
} }

View File

@ -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