From 7cae92dc6732b72386b0d436d6046df8250267c5 Mon Sep 17 00:00:00 2001 From: shadowislord Date: Sat, 13 Sep 2014 16:40:36 -0400 Subject: [PATCH] Fix rendering glitch in TestTransparentShadow (missing tangents for normal mapping) --- .../jme3test/light/TestTransparentShadow.java | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/jme3-examples/src/main/java/jme3test/light/TestTransparentShadow.java b/jme3-examples/src/main/java/jme3test/light/TestTransparentShadow.java index caddeb583..23fe73c12 100644 --- a/jme3-examples/src/main/java/jme3test/light/TestTransparentShadow.java +++ b/jme3-examples/src/main/java/jme3test/light/TestTransparentShadow.java @@ -50,6 +50,7 @@ import com.jme3.scene.shape.Sphere; import com.jme3.shadow.CompareMode; import com.jme3.shadow.DirectionalLightShadowRenderer; import com.jme3.shadow.EdgeFilteringMode; +import com.jme3.util.TangentBinormalGenerator; public class TestTransparentShadow extends SimpleApplication { @@ -59,7 +60,6 @@ public class TestTransparentShadow extends SimpleApplication { } public void simpleInitApp() { - cam.setLocation(new Vector3f(5.700248f, 6.161693f, 5.1404157f)); 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); q.scaleTextureCoordinates(Vector2f.UNIT_XY.mult(10)); + TangentBinormalGenerator.generate(q); Geometry geom = new Geometry("floor", q); Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m"); - mat.setFloat("Shininess", 0); geom.setMaterial(mat); geom.rotate(-FastMath.HALF_PI, 0, 0); @@ -77,12 +77,6 @@ public class TestTransparentShadow extends SimpleApplication { geom.setShadowMode(ShadowMode.CastAndReceive); 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(); al.setColor(ColorRGBA.White.mult(0.7f)); rootNode.addLight(al); @@ -91,15 +85,19 @@ public class TestTransparentShadow extends SimpleApplication { dl1.setDirection(new Vector3f(0, -1, 0.5f).normalizeLocal()); dl1.setColor(ColorRGBA.White.mult(1.5f)); 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); - /** Uses Texture from jme3-test-data library! */ + // Uses Texture from jme3-test-data library! ParticleEmitter fire = new ParticleEmitter("Emitter", ParticleMesh.Type.Triangle, 30); Material mat_red = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md"); mat_red.setTexture("Texture", assetManager.loadTexture("Effects/Explosion/flame.png")); - //mat_red.getAdditionalRenderState().setDepthTest(true); - //mat_red.getAdditionalRenderState().setDepthWrite(true); + fire.setShadowMode(ShadowMode.Cast); fire.setMaterial(mat_red); fire.setImagesX(2); fire.setImagesY(2); // 2x2 texture animation @@ -112,22 +110,19 @@ public class TestTransparentShadow extends SimpleApplication { fire.setLowLife(0.5f); fire.setHighLife(1.5f); fire.getParticleInfluencer().setVelocityVariation(0.3f); - fire.setLocalTranslation(1.0f, 0, 1.0f); + fire.setLocalTranslation(5.0f, 0, 1.0f); fire.setLocalScale(0.3f); fire.setQueueBucket(Bucket.Translucent); - // rootNode.attachChild(fire); - + rootNode.attachChild(fire); Material mat2 = assetManager.loadMaterial("Common/Materials/RedColor.j3m"); - Geometry ball = new Geometry("sphere", new Sphere(16, 16, 0.5f)); ball.setMaterial(mat2); ball.setShadowMode(ShadowMode.CastAndReceive); rootNode.attachChild(ball); ball.setLocalTranslation(-1.0f, 1.5f, 1.0f); - final DirectionalLightShadowRenderer dlsRenderer = new DirectionalLightShadowRenderer(assetManager, 1024, 1); dlsRenderer.setLight(dl1); dlsRenderer.setLambda(0.55f); @@ -146,6 +141,5 @@ public class TestTransparentShadow extends SimpleApplication { } } }, "stabilize"); - } }