Browse Source

Fix rendering glitch in TestTransparentShadow (missing tangents for normal mapping)

shadowislord 11 years ago
parent
commit
7cae92dc67
1 changed files with 11 additions and 17 deletions
  1. 11 17
      jme3-examples/src/main/java/jme3test/light/TestTransparentShadow.java

+ 11 - 17
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");
-
    }
 }