Example1.java
上传用户:gyyuli
上传日期:2013-07-09
资源大小:3050k
文件大小:3k
源码类别:

J2ME

开发平台:

Java

  1. import javax.microedition.m3g.*;
  2. import java.util.*;
  3. /**
  4.  * Scene graph fractal test.
  5.  * 
  6.  * This example should draw a whirling cloud of white cubes
  7.  * transformed with hierarchial transforms. One of the cubes is bigger
  8.  * than the rest. The camera should follow that cube.
  9.  * 
  10.  */
  11. public class Example1 extends ExampleBase
  12. {
  13.     private World iWorld;
  14.     private Vector iNodes;
  15.     private Vector iAxis;
  16.     public Example1()
  17.     {
  18.         super(SHOW_RENDER_TIME);
  19.     }
  20.     protected void render(int time)
  21.     {
  22.         float angle = time * 0.1f;
  23.         for (int i = 0; i < iNodes.size(); i++)
  24.         {
  25.             Node node = (Node)iNodes.elementAt(i);
  26.             float[] axis = (float[])iAxis.elementAt(i);
  27.             node.setOrientation(angle * axis[3], axis[0], axis[1], axis[2]);
  28.         }
  29.         iWorld.align(null); // throws IllegalStateException on WTK22b
  30.         Graphics3D.getInstance().render(iWorld);
  31.     }
  32.     protected void initialize()
  33.     {
  34.         iWorld = new World();
  35.         iNodes = new Vector();
  36.         iAxis = new Vector();
  37.         Mesh box = createBox();
  38.         Background bg = new Background();
  39.         bg.setColor(0xff204080);
  40.         iWorld.setBackground(bg);
  41.         Camera camera = new Camera();
  42.         camera.setPerspective(90.0f, 1.0f, 1.0f, 100.0f);
  43.         camera.setTranslation(0.0f, 0.0f, 30.0f);
  44.         iWorld.addChild(camera);
  45.         iWorld.setActiveCamera(camera);
  46.         Light light = new Light();
  47.         light.setTranslation(0.0f, 0.0f, 30.0f);
  48.         iWorld.addChild(light);
  49.         Node ground = (Node)box.duplicate();
  50.         ground.setTranslation(0.0f, -20.0f, 0.0f);
  51.         ground.setScale(2.0f, 0.1f, 2.0f);
  52.         iWorld.addChild(ground);
  53.         Node fractal = createRecursive(box, 6);
  54.         iWorld.addChild(fractal);
  55.         Node target = fractal;
  56.         while (target instanceof Group)
  57.         {
  58.             target = ((Group)target).getChild((int)(random() * 2.0f));
  59.         }
  60.         target.scale(3.0f, 3.0f, 3.0f);
  61.         camera.setScale(-1.0f, 1.0f, -1.0f);
  62.         camera.setAlignment(target, Node.ORIGIN, iWorld, Node.Y_AXIS);
  63.     }
  64.     private Node createRecursive(Mesh aBox, int aCounter)
  65.     {
  66.         float scale = 0.7f;
  67.         float offset = 8.0f;
  68.         Node result;
  69.         if (aCounter == 0)
  70.         {
  71.             result = (Node)aBox.duplicate();
  72.         } else
  73.         {
  74.             Node left = createRecursive(aBox, aCounter - 1);
  75.             Node right = createRecursive(aBox, aCounter - 1);
  76.             left.translate(-offset, 0.0f, 0.0f);
  77.             left.scale(scale, scale, scale);
  78.             right.translate(offset, 0.0f, 0.0f);
  79.             right.scale(scale, scale, scale);
  80.             Group group = new Group();
  81.             group.addChild(left);
  82.             group.addChild(right);
  83.             result = group;
  84.         }
  85.         iNodes.addElement(result);
  86.         float[] axis = new float[4];
  87.         axis[0] = (float)random() - 0.5f;
  88.         axis[1] = (float)random() - 0.5f;
  89.         axis[2] = (float)random() - 0.5f;
  90.         axis[3] = (float)random();
  91.         iAxis.addElement(axis);
  92.         return result;
  93.     }
  94. }