Subversion Repositories distributed

Rev

Rev 26 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. package test.fraktal3d;
  2. import com.jme.math.Vector3f;
  3. import com.jme.renderer.ColorRGBA;
  4. import com.jme.scene.Node;
  5. import com.jme.scene.shape.Box;
  6. import com.jme.scene.state.BlendState;
  7. import com.jme.scene.state.MaterialState;
  8. import com.jme.system.DisplaySystem;
  9.  
  10. public class Raumplan {
  11.         private Box centerbox;
  12.        
  13.         private static final int Abbruch_Size = 5;
  14.         private static final float Size_Faktor = 0.5f;
  15.         private static final float Abstand_Initial = 0.5f;
  16.         // private static final float Abstand_Faktor = 0.5f;
  17.        
  18.         public Raumplan(Node rootNode, float size, float x, float y, float z, LockDirectoryEnum e) {
  19.                 this.centerbox = new Box("Center-Box", new Vector3f(x, y, z), new Vector3f(size, size, size));
  20.         }
  21.        
  22.         public void los(Node rootNode, float size, float x, float y, float z, LockDirectoryEnum e) {
  23.                 if (size > Abbruch_Size) {             
  24.                         new Raumplan(getRoomNode(), size, x-Abstand_Initial, y-Abstand_Initial, z-Abstand_Initial, LockDirectoryEnum.LOCK_X_POS).los(this.getRoomNode(), size*Size_Faktor, x-Abstand_Initial, y-Abstand_Initial, z-Abstand_Initial, LockDirectoryEnum.LOCK_X_POS);
  25.                 }              
  26.  
  27.                 rootNode.attachChild(getRoomNode());
  28.         }
  29.  
  30.         protected Node getRoomNode() {
  31.                 Node roomNode = new Node();
  32.                
  33.                 float opacityAmount = 1.0f;
  34.                 DisplaySystem display = DisplaySystem.getDisplaySystem();
  35.                
  36.                 MaterialState materialState = display.getRenderer()
  37.                 .createMaterialState();
  38.                
  39.         // the sphere material taht will be modified to make the sphere
  40.         // look opaque then transparent then opaque and so on
  41.         materialState = display.getRenderer().createMaterialState();
  42.         materialState.setAmbient(new ColorRGBA(0.0f, 0.0f, 0.0f, opacityAmount));
  43.         materialState.setDiffuse(new ColorRGBA(0.1f, 0.5f, 0.8f, opacityAmount));
  44.         materialState.setSpecular(new ColorRGBA(1.0f, 1.0f, 1.0f, opacityAmount));
  45.         materialState.setShininess(128.0f);
  46.         materialState.setEmissive(new ColorRGBA(0.0f, 0.0f, 0.0f, opacityAmount));
  47.         materialState.setEnabled(true);
  48.  
  49.         // IMPORTANT: this is used to handle the internal sphere faces when
  50.         // setting them to transparent, try commenting this line to see what
  51.         // happens
  52.         materialState.setMaterialFace(MaterialState.MaterialFace.FrontAndBack);
  53.  
  54.         centerbox.setRenderState(materialState);
  55.         centerbox.updateRenderState();
  56.  
  57.         roomNode.attachChild(centerbox);
  58.  
  59.         // to handle transparency: a BlendState
  60.         // an other tutorial will be made to deal with the possibilities of this
  61.         // RenderState
  62.         final BlendState alphaState = DisplaySystem.getDisplaySystem().getRenderer().createBlendState();
  63.         alphaState.setBlendEnabled(true);
  64.         alphaState.setSourceFunction(BlendState.SourceFunction.SourceAlpha);
  65.         alphaState.setDestinationFunction(BlendState.DestinationFunction.OneMinusSourceAlpha);
  66.         alphaState.setTestEnabled(true);
  67.         alphaState.setTestFunction(BlendState.TestFunction.GreaterThan);
  68.         alphaState.setEnabled(true);
  69.  
  70.         centerbox.setRenderState(alphaState);
  71.         centerbox.updateRenderState();
  72.                
  73.         return roomNode;
  74.         }
  75.  
  76. }
  77.