1package jme3test.post;
2
3import com.jme3.app.SimpleApplication;
4import com.jme3.light.AmbientLight;
5import com.jme3.light.DirectionalLight;
6import com.jme3.material.Material;
7import com.jme3.math.*;
8import com.jme3.post.FilterPostProcessor;
9import com.jme3.post.ssao.SSAOFilter;
10import com.jme3.renderer.queue.RenderQueue.Bucket;
11import com.jme3.renderer.queue.RenderQueue.ShadowMode;
12import com.jme3.scene.Geometry;
13import com.jme3.scene.Spatial;
14import com.jme3.scene.shape.Quad;
15
16public class TestTransparentSSAO extends SimpleApplication {
17
18    public static void main(String[] args) {
19        TestTransparentSSAO app = new TestTransparentSSAO();
20        app.start();
21    }
22
23    public void simpleInitApp() {
24        renderManager.setAlphaToCoverage(true);
25        cam.setLocation(new Vector3f(0.14914267f, 0.58147097f, 4.7686534f));
26        cam.setRotation(new Quaternion(-0.0044764364f, 0.9767943f, 0.21314798f, 0.020512417f));
27
28//        cam.setLocation(new Vector3f(2.0606942f, 3.20342f, 6.7860126f));
29//        cam.setRotation(new Quaternion(-0.017481906f, 0.98241085f, -0.12393151f, -0.13857932f));
30
31        viewPort.setBackgroundColor(ColorRGBA.DarkGray);
32
33        Quad q = new Quad(20, 20);
34        q.scaleTextureCoordinates(Vector2f.UNIT_XY.mult(5));
35        Geometry geom = new Geometry("floor", q);
36        Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m");
37        geom.setMaterial(mat);
38
39        geom.rotate(-FastMath.HALF_PI, 0, 0);
40        geom.center();
41        geom.setShadowMode(ShadowMode.Receive);
42        rootNode.attachChild(geom);
43
44        // create the geometry and attach it
45        Spatial teaGeom = assetManager.loadModel("Models/Tree/Tree.mesh.j3o");
46        teaGeom.setQueueBucket(Bucket.Transparent);
47        teaGeom.setShadowMode(ShadowMode.Cast);
48
49        AmbientLight al = new AmbientLight();
50        al.setColor(ColorRGBA.White.mult(2));
51        rootNode.addLight(al);
52
53        DirectionalLight dl1 = new DirectionalLight();
54        dl1.setDirection(new Vector3f(1, -1, 1).normalizeLocal());
55        dl1.setColor(new ColorRGBA(0.965f, 0.949f, 0.772f, 1f).mult(0.7f));
56        rootNode.addLight(dl1);
57
58        DirectionalLight dl = new DirectionalLight();
59        dl.setDirection(new Vector3f(-1, -1, -1).normalizeLocal());
60        dl.setColor(new ColorRGBA(0.965f, 0.949f, 0.772f, 1f).mult(0.7f));
61        rootNode.addLight(dl);
62
63        rootNode.attachChild(teaGeom);
64
65        FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
66
67        SSAOFilter ssao = new SSAOFilter(0.49997783f, 42.598858f, 35.999966f, 0.39299846f);
68        fpp.addFilter(ssao);
69
70        SSAOUI ui = new SSAOUI(inputManager, ssao);
71
72        viewPort.addProcessor(fpp);
73    }
74}
75