|
|
@ -50,6 +50,7 @@ import com.jme3.scene.shape.Sphere; |
|
|
|
import com.jme3.shadow.CompareMode; |
|
|
|
import com.jme3.shadow.CompareMode; |
|
|
|
import com.jme3.shadow.DirectionalLightShadowRenderer; |
|
|
|
import com.jme3.shadow.DirectionalLightShadowRenderer; |
|
|
|
import com.jme3.shadow.EdgeFilteringMode; |
|
|
|
import com.jme3.shadow.EdgeFilteringMode; |
|
|
|
|
|
|
|
import com.jme3.util.TangentBinormalGenerator; |
|
|
|
|
|
|
|
|
|
|
|
public class TestTransparentShadow extends SimpleApplication { |
|
|
|
public class TestTransparentShadow extends SimpleApplication { |
|
|
|
|
|
|
|
|
|
|
@ -59,7 +60,6 @@ public class TestTransparentShadow extends SimpleApplication { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void simpleInitApp() { |
|
|
|
public void simpleInitApp() { |
|
|
|
|
|
|
|
|
|
|
|
cam.setLocation(new Vector3f(5.700248f, 6.161693f, 5.1404157f)); |
|
|
|
cam.setLocation(new Vector3f(5.700248f, 6.161693f, 5.1404157f)); |
|
|
|
cam.setRotation(new Quaternion(-0.09441641f, 0.8993388f, -0.24089815f, -0.35248178f)); |
|
|
|
cam.setRotation(new Quaternion(-0.09441641f, 0.8993388f, -0.24089815f, -0.35248178f)); |
|
|
|
|
|
|
|
|
|
|
@ -67,9 +67,9 @@ public class TestTransparentShadow extends SimpleApplication { |
|
|
|
|
|
|
|
|
|
|
|
Quad q = new Quad(20, 20); |
|
|
|
Quad q = new Quad(20, 20); |
|
|
|
q.scaleTextureCoordinates(Vector2f.UNIT_XY.mult(10)); |
|
|
|
q.scaleTextureCoordinates(Vector2f.UNIT_XY.mult(10)); |
|
|
|
|
|
|
|
TangentBinormalGenerator.generate(q); |
|
|
|
Geometry geom = new Geometry("floor", q); |
|
|
|
Geometry geom = new Geometry("floor", q); |
|
|
|
Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m"); |
|
|
|
Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m"); |
|
|
|
mat.setFloat("Shininess", 0); |
|
|
|
|
|
|
|
geom.setMaterial(mat); |
|
|
|
geom.setMaterial(mat); |
|
|
|
|
|
|
|
|
|
|
|
geom.rotate(-FastMath.HALF_PI, 0, 0); |
|
|
|
geom.rotate(-FastMath.HALF_PI, 0, 0); |
|
|
@ -77,12 +77,6 @@ public class TestTransparentShadow extends SimpleApplication { |
|
|
|
geom.setShadowMode(ShadowMode.CastAndReceive); |
|
|
|
geom.setShadowMode(ShadowMode.CastAndReceive); |
|
|
|
rootNode.attachChild(geom); |
|
|
|
rootNode.attachChild(geom); |
|
|
|
|
|
|
|
|
|
|
|
// create the geometry and attach it
|
|
|
|
|
|
|
|
Spatial tree = assetManager.loadModel("Models/Tree/Tree.mesh.j3o"); |
|
|
|
|
|
|
|
tree.setQueueBucket(Bucket.Transparent); |
|
|
|
|
|
|
|
tree.setShadowMode(ShadowMode.CastAndReceive); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AmbientLight al = new AmbientLight(); |
|
|
|
AmbientLight al = new AmbientLight(); |
|
|
|
al.setColor(ColorRGBA.White.mult(0.7f)); |
|
|
|
al.setColor(ColorRGBA.White.mult(0.7f)); |
|
|
|
rootNode.addLight(al); |
|
|
|
rootNode.addLight(al); |
|
|
@ -91,15 +85,19 @@ public class TestTransparentShadow extends SimpleApplication { |
|
|
|
dl1.setDirection(new Vector3f(0, -1, 0.5f).normalizeLocal()); |
|
|
|
dl1.setDirection(new Vector3f(0, -1, 0.5f).normalizeLocal()); |
|
|
|
dl1.setColor(ColorRGBA.White.mult(1.5f)); |
|
|
|
dl1.setColor(ColorRGBA.White.mult(1.5f)); |
|
|
|
rootNode.addLight(dl1); |
|
|
|
rootNode.addLight(dl1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// create the geometry and attach it
|
|
|
|
|
|
|
|
Spatial tree = assetManager.loadModel("Models/Tree/Tree.mesh.j3o"); |
|
|
|
|
|
|
|
tree.setQueueBucket(Bucket.Transparent); |
|
|
|
|
|
|
|
tree.setShadowMode(ShadowMode.CastAndReceive); |
|
|
|
|
|
|
|
|
|
|
|
rootNode.attachChild(tree); |
|
|
|
rootNode.attachChild(tree); |
|
|
|
|
|
|
|
|
|
|
|
/** Uses Texture from jme3-test-data library! */ |
|
|
|
// Uses Texture from jme3-test-data library!
|
|
|
|
ParticleEmitter fire = new ParticleEmitter("Emitter", ParticleMesh.Type.Triangle, 30); |
|
|
|
ParticleEmitter fire = new ParticleEmitter("Emitter", ParticleMesh.Type.Triangle, 30); |
|
|
|
Material mat_red = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md"); |
|
|
|
Material mat_red = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md"); |
|
|
|
mat_red.setTexture("Texture", assetManager.loadTexture("Effects/Explosion/flame.png")); |
|
|
|
mat_red.setTexture("Texture", assetManager.loadTexture("Effects/Explosion/flame.png")); |
|
|
|
//mat_red.getAdditionalRenderState().setDepthTest(true);
|
|
|
|
fire.setShadowMode(ShadowMode.Cast); |
|
|
|
//mat_red.getAdditionalRenderState().setDepthWrite(true);
|
|
|
|
|
|
|
|
fire.setMaterial(mat_red); |
|
|
|
fire.setMaterial(mat_red); |
|
|
|
fire.setImagesX(2); |
|
|
|
fire.setImagesX(2); |
|
|
|
fire.setImagesY(2); // 2x2 texture animation
|
|
|
|
fire.setImagesY(2); // 2x2 texture animation
|
|
|
@ -112,22 +110,19 @@ public class TestTransparentShadow extends SimpleApplication { |
|
|
|
fire.setLowLife(0.5f); |
|
|
|
fire.setLowLife(0.5f); |
|
|
|
fire.setHighLife(1.5f); |
|
|
|
fire.setHighLife(1.5f); |
|
|
|
fire.getParticleInfluencer().setVelocityVariation(0.3f); |
|
|
|
fire.getParticleInfluencer().setVelocityVariation(0.3f); |
|
|
|
fire.setLocalTranslation(1.0f, 0, 1.0f); |
|
|
|
fire.setLocalTranslation(5.0f, 0, 1.0f); |
|
|
|
fire.setLocalScale(0.3f); |
|
|
|
fire.setLocalScale(0.3f); |
|
|
|
fire.setQueueBucket(Bucket.Translucent); |
|
|
|
fire.setQueueBucket(Bucket.Translucent); |
|
|
|
// rootNode.attachChild(fire);
|
|
|
|
rootNode.attachChild(fire); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Material mat2 = assetManager.loadMaterial("Common/Materials/RedColor.j3m"); |
|
|
|
Material mat2 = assetManager.loadMaterial("Common/Materials/RedColor.j3m"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Geometry ball = new Geometry("sphere", new Sphere(16, 16, 0.5f)); |
|
|
|
Geometry ball = new Geometry("sphere", new Sphere(16, 16, 0.5f)); |
|
|
|
ball.setMaterial(mat2); |
|
|
|
ball.setMaterial(mat2); |
|
|
|
ball.setShadowMode(ShadowMode.CastAndReceive); |
|
|
|
ball.setShadowMode(ShadowMode.CastAndReceive); |
|
|
|
rootNode.attachChild(ball); |
|
|
|
rootNode.attachChild(ball); |
|
|
|
ball.setLocalTranslation(-1.0f, 1.5f, 1.0f); |
|
|
|
ball.setLocalTranslation(-1.0f, 1.5f, 1.0f); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
final DirectionalLightShadowRenderer dlsRenderer = new DirectionalLightShadowRenderer(assetManager, 1024, 1); |
|
|
|
final DirectionalLightShadowRenderer dlsRenderer = new DirectionalLightShadowRenderer(assetManager, 1024, 1); |
|
|
|
dlsRenderer.setLight(dl1); |
|
|
|
dlsRenderer.setLight(dl1); |
|
|
|
dlsRenderer.setLambda(0.55f); |
|
|
|
dlsRenderer.setLambda(0.55f); |
|
|
@ -146,6 +141,5 @@ public class TestTransparentShadow extends SimpleApplication { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}, "stabilize"); |
|
|
|
}, "stabilize"); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|