Advertisement
Guest User

Untitled

a guest
Aug 6th, 2012
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.27 KB | None | 0 0
  1. package hello;
  2.  
  3. import com.jme3.app.SimpleApplication;
  4. import com.jme3.font.BitmapText;
  5. import com.jme3.input.KeyInput;
  6. import com.jme3.input.controls.ActionListener;
  7. import com.jme3.input.controls.AnalogListener;
  8. import com.jme3.input.controls.KeyTrigger;
  9. import com.jme3.light.AmbientLight;
  10. import com.jme3.light.DirectionalLight;
  11. import com.jme3.material.Material;
  12. import com.jme3.math.ColorRGBA;
  13. import com.jme3.math.Vector3f;
  14. import com.jme3.post.FilterPostProcessor;
  15. import com.jme3.post.filters.FXAAFilter;
  16. import com.jme3.post.ssao.SSAOFilter;
  17. import com.jme3.renderer.queue.RenderQueue.ShadowMode;
  18. import com.jme3.scene.Geometry;
  19. import com.jme3.scene.Node;
  20. import com.jme3.scene.shape.Box;
  21. import com.jme3.shadow.PssmShadowRenderer;
  22. import com.jme3.system.AppSettings;
  23.  
  24. public class HelloSingleFPP extends SimpleApplication {
  25.  
  26.     public static void main(String[] args) {
  27.         AppSettings settings = new AppSettings(true);
  28.         settings.setResolution(800, 600);
  29.         settings.setTitle(HelloSingleFPP.class.getSimpleName());
  30.         settings.setSamples(0);
  31.         settings.setFrameRate(60);        
  32.        
  33.         HelloSingleFPP app = new HelloSingleFPP();
  34.         app.app = app; // i know, right?
  35.         app.setShowSettings(false);
  36.         app.setSettings(settings);
  37.         app.setPauseOnLostFocus(false);
  38.         app.start();
  39.     }
  40.    
  41.     private HelloSingleFPP app;
  42.     private float speedX = 0.1f, speedY = 0.1f;
  43.     private Vector3f lightDirection = new Vector3f(-.5f, -.5f, -.5f);
  44.    
  45.     private PssmShadowRenderer pssmRenderer;
  46.     private FilterPostProcessor fpp;   
  47.     private FXAAFilter fxaaFilter;
  48.     private SSAOFilter ssaoFilter;
  49.     private boolean useFXAA = false, useSSAO = false;
  50.    
  51.     private String postInfo = "";
  52.     private BitmapText postText;   
  53.    
  54.     @Override
  55.     public void simpleInitApp() {
  56.         setupCamera();
  57.         setupFont();
  58.         setupKeys();
  59.         setupFloor();
  60.         setupBox();    
  61.         setupLights();
  62.         setupPost();       
  63.     }
  64.    
  65.     private void setupCamera() {
  66.         flyCam.setEnabled(false);
  67.         inputManager.removeListener(flyCam);
  68.        
  69.         final RtsCam rtsCam = new RtsCam(cam, rootNode);
  70.         rtsCam.registerWithInput(inputManager);
  71.         rtsCam.setCenter(new Vector3f(0f, 0f, 0f));
  72.     }
  73.    
  74.     private void setupFont() {
  75.         guiNode.detachAllChildren();
  76.         guiFont = assetManager.loadFont("Interface/Fonts/Console.fnt");
  77.         postText = new BitmapText(guiFont, false);
  78.         postText.setSize(guiFont.getCharSet().getRenderedSize());      
  79.         updatePostInfo();
  80.         guiNode.attachChild(postText);
  81.     }
  82.    
  83.     private void setupKeys() {
  84.         inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_LEFT));    
  85.         inputManager.addMapping("Right", new KeyTrigger(KeyInput.KEY_RIGHT));
  86.         inputManager.addMapping("Up", new KeyTrigger(KeyInput.KEY_UP));
  87.         inputManager.addMapping("Down", new KeyTrigger(KeyInput.KEY_DOWN));
  88.         inputManager.addMapping("SSAO", new KeyTrigger(KeyInput.KEY_O));
  89.         inputManager.addMapping("PSSM", new KeyTrigger(KeyInput.KEY_P));
  90.         inputManager.addMapping("MSAA", new KeyTrigger(KeyInput.KEY_K));
  91.         inputManager.addMapping("FXAA", new KeyTrigger(KeyInput.KEY_L));
  92.        
  93.         inputManager.addListener(analogListener, new String[]{"Left", "Right", "Up", "Down"});
  94.         inputManager.addListener(actionListener, new String[]{"SSAO", "PSSM", "MSAA", "FXAA"});
  95.     }
  96.    
  97.     private AnalogListener analogListener = new AnalogListener() {
  98.         public void onAnalog(String name, float value, float tpf) {
  99.             if (name.equals("Left")) speedY -= 1f * tpf;
  100.             if (name.equals("Right")) speedY += 1f * tpf;
  101.             if (name.equals("Up")) speedX += 1f * tpf;
  102.             if (name.equals("Down")) speedX -= 1f * tpf;
  103.         }
  104.     };
  105.    
  106.     private ActionListener actionListener = new ActionListener() {
  107.         public void onAction(String name, boolean keyPressed, float tpf) {
  108.             // shadows
  109.             if (name.equals("PSSM") && keyPressed) {
  110.                 if (viewPort.getProcessors().contains(pssmRenderer)) viewPort.removeProcessor(pssmRenderer);
  111.                 else viewPort.addProcessor(pssmRenderer);
  112.             }
  113.             // hardware MSAA
  114.             if (name.equals("MSAA") && keyPressed) {
  115.                 int samples = settings.getSamples();
  116.                 if (samples == 0) settings.setSamples(2);
  117.                 else if (samples < 16) settings.setSamples(samples * 2);
  118.                 else settings.setSamples(0);               
  119.                 app.setSettings(settings);
  120.                 app.restart();
  121.             }
  122.             // ssao filter
  123.             if (name.equals("SSAO") && keyPressed) {
  124.                 viewPort.removeProcessor(fpp);
  125.                 if (useSSAO) fpp.removeFilter(ssaoFilter);
  126.                 else fpp.addFilter(ssaoFilter);
  127.                 viewPort.addProcessor(fpp);
  128.                 useSSAO = !useSSAO;
  129.             }
  130.             //fxaa
  131.             if (name.equals("FXAA") && keyPressed) {
  132.                 viewPort.removeProcessor(fpp);
  133.                 if (useFXAA) fpp.removeFilter(fxaaFilter);
  134.                 else fpp.addFilter(fxaaFilter);
  135.                 viewPort.addProcessor(fpp);
  136.                 useFXAA = !useFXAA;
  137.             }
  138.            
  139.             updatePostInfo();
  140.         }
  141.     };
  142.    
  143.     private void setupFloor() {
  144.         Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");       
  145.         mat.setBoolean("UseMaterialColors", true);
  146.         mat.setColor("Ambient", ColorRGBA.Gray);
  147.         mat.setColor("Diffuse", ColorRGBA.Gray);
  148.         mat.setColor("Specular", ColorRGBA.Gray);      
  149.         mat.setFloat("Shininess", 2);
  150.        
  151.         Geometry box = new Geometry("Floor", new Box(Vector3f.ZERO, 5f, 0.1f, 5f));
  152.         box.setMaterial(mat);
  153.         box.setShadowMode(ShadowMode.Receive);
  154.         rootNode.attachChild(box);
  155.     }
  156.    
  157.     private void setupBox() {
  158.         Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");       
  159.         mat.setBoolean("UseMaterialColors", true);
  160.         mat.setColor("Ambient", ColorRGBA.White);
  161.         mat.setColor("Diffuse", ColorRGBA.White);
  162.         mat.setColor("Specular", ColorRGBA.White);
  163.         mat.setFloat("Shininess", 12);
  164.        
  165.         Geometry box = new Geometry("Box", new Box(Vector3f.ZERO, 1, 1, 1));
  166.         box.setMaterial(mat);
  167.         box.setShadowMode(ShadowMode.CastAndReceive);
  168.        
  169.         Node pivot = new Node("pivot");
  170.         pivot.move(0f, 2f, 0f);
  171.         pivot.attachChild(box);
  172.        
  173.         rootNode.attachChild(pivot);
  174.     }
  175.    
  176.     private void setupLights() {
  177.         DirectionalLight dl = new DirectionalLight();
  178.         dl.setDirection(lightDirection.normalizeLocal());
  179.         dl.setColor(ColorRGBA.White);
  180.         rootNode.addLight(dl);
  181.        
  182.         AmbientLight al = new AmbientLight();
  183.         al.setColor(ColorRGBA.White.mult(0.2f));
  184.         rootNode.addLight(al);
  185.     }
  186.    
  187.     private void setupPost() {
  188.         // set up fpp
  189.         fpp = new FilterPostProcessor(assetManager);
  190.         fpp.setNumSamples(1);
  191.        
  192.         // post proc filters
  193.         ssaoFilter = new SSAOFilter(12.940201f, 43.928635f, 0.32999992f, 0.6059958f);
  194.         fxaaFilter = new FXAAFilter();
  195.        
  196.         // shadows
  197.         pssmRenderer = new PssmShadowRenderer(assetManager, 1024, 3);
  198.         pssmRenderer.setDirection(lightDirection.normalizeLocal());    
  199.         rootNode.setShadowMode(ShadowMode.Off);    
  200.     }
  201.    
  202.     private void updatePostInfo() {
  203.         boolean hasPSSM = (viewPort.getProcessors().contains(pssmRenderer));       
  204.         int samples = settings.getSamples();
  205.        
  206.         postInfo = "";
  207.         if (hasPSSM) postInfo += "PSSM, ";
  208.         if (useSSAO) postInfo += "SSAO, ";
  209.         if (useFXAA) postInfo += "FXAA, ";
  210.         postInfo += samples + "xAA";
  211.        
  212.         postText.setText(postInfo);
  213.         postText.setLocalTranslation(settings.getWidth() - postText.getLineWidth() - 10,
  214.                 settings.getHeight() - postText.getLineHeight() + 5, 0);
  215.     }
  216.    
  217.     @Override
  218.     public void simpleUpdate(float tpf) {
  219.         rootNode.getChild("pivot").rotate(speedX*tpf, speedY*tpf, 0f);
  220.     }
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement