Home | History | Annotate | Download | only in post
      1 package jme3test.post;
      2 
      3 import com.jme3.app.SimpleApplication;
      4 import com.jme3.light.AmbientLight;
      5 import com.jme3.light.DirectionalLight;
      6 import com.jme3.material.Material;
      7 import com.jme3.math.*;
      8 import com.jme3.post.FilterPostProcessor;
      9 import com.jme3.post.filters.CartoonEdgeFilter;
     10 import com.jme3.renderer.queue.RenderQueue.Bucket;
     11 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
     12 import com.jme3.scene.Geometry;
     13 import com.jme3.scene.Node;
     14 import com.jme3.scene.Spatial;
     15 import com.jme3.scene.shape.Quad;
     16 import com.jme3.texture.Texture;
     17 
     18 public class TestTransparentCartoonEdge extends SimpleApplication {
     19 
     20     public static void main(String[] args){
     21         TestTransparentCartoonEdge app = new TestTransparentCartoonEdge();
     22         app.start();
     23     }
     24 
     25     public void simpleInitApp() {
     26         renderManager.setAlphaToCoverage(true);
     27         cam.setLocation(new Vector3f(0.14914267f, 0.58147097f, 4.7686534f));
     28         cam.setRotation(new Quaternion(-0.0044764364f, 0.9767943f, 0.21314798f, 0.020512417f));
     29 
     30 //        cam.setLocation(new Vector3f(2.0606942f, 3.20342f, 6.7860126f));
     31 //        cam.setRotation(new Quaternion(-0.017481906f, 0.98241085f, -0.12393151f, -0.13857932f));
     32 
     33         viewPort.setBackgroundColor(ColorRGBA.DarkGray);
     34 
     35         Quad q = new Quad(20, 20);
     36         q.scaleTextureCoordinates(Vector2f.UNIT_XY.mult(5));
     37         Geometry geom = new Geometry("floor", q);
     38         Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m");
     39         geom.setMaterial(mat);
     40 
     41         geom.rotate(-FastMath.HALF_PI, 0, 0);
     42         geom.center();
     43         geom.setShadowMode(ShadowMode.Receive);
     44         rootNode.attachChild(geom);
     45 
     46         // create the geometry and attach it
     47         Spatial teaGeom = assetManager.loadModel("Models/Tree/Tree.mesh.j3o");
     48         teaGeom.setQueueBucket(Bucket.Transparent);
     49         teaGeom.setShadowMode(ShadowMode.Cast);
     50         makeToonish(teaGeom);
     51 
     52         AmbientLight al = new AmbientLight();
     53         al.setColor(ColorRGBA.White.mult(2));
     54         rootNode.addLight(al);
     55 
     56         DirectionalLight dl1 = new DirectionalLight();
     57         dl1.setDirection(new Vector3f(1, -1, 1).normalizeLocal());
     58         dl1.setColor(new ColorRGBA(0.965f, 0.949f, 0.772f, 1f).mult(0.7f));
     59         rootNode.addLight(dl1);
     60 
     61         DirectionalLight dl = new DirectionalLight();
     62         dl.setDirection(new Vector3f(-1, -1, -1).normalizeLocal());
     63         dl.setColor(new ColorRGBA(0.965f, 0.949f, 0.772f, 1f).mult(0.7f));
     64         rootNode.addLight(dl);
     65 
     66         rootNode.attachChild(teaGeom);
     67 
     68         FilterPostProcessor fpp=new FilterPostProcessor(assetManager);
     69         CartoonEdgeFilter toon=new CartoonEdgeFilter();
     70         toon.setEdgeWidth(0.5f);
     71         toon.setEdgeIntensity(1.0f);
     72         toon.setNormalThreshold(0.8f);
     73         fpp.addFilter(toon);
     74         viewPort.addProcessor(fpp);
     75     }
     76 
     77         public void makeToonish(Spatial spatial){
     78         if (spatial instanceof Node){
     79             Node n = (Node) spatial;
     80             for (Spatial child : n.getChildren())
     81                 makeToonish(child);
     82         }else if (spatial instanceof Geometry){
     83             Geometry g = (Geometry) spatial;
     84             Material m = g.getMaterial();
     85             if (m.getMaterialDef().getName().equals("Phong Lighting")){
     86                 Texture t = assetManager.loadTexture("Textures/ColorRamp/toon.png");
     87 //                t.setMinFilter(Texture.MinFilter.NearestNoMipMaps);
     88 //                t.setMagFilter(Texture.MagFilter.Nearest);
     89                 m.setTexture("ColorRamp", t);
     90                 m.setBoolean("UseMaterialColors", true);
     91                 m.setColor("Specular", ColorRGBA.Black);
     92                 m.setColor("Diffuse", ColorRGBA.White);
     93                 m.setBoolean("VertexLighting", true);
     94             }
     95         }
     96     }
     97 }
     98