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

J2ME

开发平台:

Java

  1. import javax.microedition.m3g.*;
  2. /**
  3.  * Morphing test.
  4.  */
  5. public class Example9 extends ExampleBase
  6. {
  7.     private SkinnedMesh iSkinnedMesh;
  8.     private Light iLight;
  9.     private Camera iCamera;
  10.     private int iCurrentFrame;
  11.     private Transform trans;
  12.     private Transform iLightTrans;
  13.     private Transform bone1Trans;
  14.     private Transform bone2Trans;
  15.     private Group skeleton;
  16.     private Group bone1;
  17.     private Group bone2;
  18.     public Example9()
  19.     {
  20.         super(SHOW_RENDER_TIME);
  21.         iCurrentFrame = 0;
  22.         trans = new Transform();
  23.         bone2Trans = new Transform();
  24.         bone1Trans = new Transform();
  25.     }
  26.     protected void render(int time)
  27.     {
  28.         Background back = new Background();
  29.         back.setColor(0xFFFFFFFF);
  30.        // back.setColor(0xff404045);
  31.         back.setDepthClearEnable(true);
  32.         Graphics3D.getInstance().clear(back);
  33.         bone1Trans.setIdentity();
  34.         bone1Trans.postTranslate(0.0f, (float) (4*3*25)*0.03f, 0.0f);
  35.         bone1Trans.postRotate((float)Math.sin(((double)iCurrentFrame/30)*Math.PI*2)*40, 0.0f, 0.0f, 1.0f);
  36.         bone1Trans.postTranslate(0.0f, (float) (-4*3*25)*0.03f, 0.0f);
  37.         bone1.setTransform(bone1Trans);
  38.         bone2Trans.setIdentity();
  39.         bone2Trans.postTranslate(0.0f, (float) (-4*3*25)*0.03f, 0.0f);
  40.         bone2Trans.postRotate((float)Math.sin(((double)iCurrentFrame/60)*Math.PI*2)*40, 0.0f, 0.0f, 1.0f);
  41.         bone2Trans.postTranslate(0.0f, (float) (4*3*25)*0.03f, 0.0f);
  42.         bone2.setTransform(bone2Trans);
  43.         trans.postRotate(2.0f, 0.0f, 1.0f, 0.0f);
  44.         Graphics3D.getInstance().render(iSkinnedMesh, trans);
  45.         if ((iCurrentFrame + 15) % 30 == 0)
  46.         {
  47.             iSkinnedMesh = (SkinnedMesh) iSkinnedMesh.duplicate();
  48.             bone1 = (Group) iSkinnedMesh.getSkeleton().getChild(0);
  49.             bone2 = (Group) bone1.getChild(0);
  50.         }
  51.         iCurrentFrame++;
  52.     }
  53.     protected void initialize()
  54.     {
  55.         int sides = 8;
  56.         short[] positions = new short[sides*8*3 * 3];
  57.         short[] normals = new short[sides*8*3 * 3];
  58.         for (int i = 0; i < 8*3; i++)
  59.         {
  60.             for (int j = 0; j < sides; j++)
  61.             {
  62.                 positions[3*(i*sides + j)] = (short) (100*Math.sin(2*Math.PI*((float)j / (float)sides)));
  63.                 positions[3*(i*sides + j) + 1] = (short) (-50*i + 4*3*50); // Normalize to origin.
  64.                 positions[3*(i*sides + j) + 2] = (short) (100*Math.cos(2*Math.PI*((float)j / (float)sides)));
  65.                 normals[3*(i*sides + j)] = (short) (-100*Math.sin(2*Math.PI*((float)j / (float)sides)));
  66.                 normals[3*(i*sides + j) + 1] = (short) 0;
  67.                 normals[3*(i*sides + j) + 2] = (short) (-100*Math.cos(2*Math.PI*((float)j / (float)sides)));
  68.             }
  69.         }
  70.         VertexArray normalsArray = new VertexArray(3*8*sides, 3, 2);
  71.         normalsArray.set(0,3*8*sides, normals);
  72.         VertexArray basePositions = new VertexArray(3*8*sides, 3, 2);
  73.         basePositions.set(0,3*8*sides, positions);
  74.         int[] stripIndices = new int[(8*3-1)*(2*sides+2)];
  75.         int[] stripLengths = new int[8*3-1];
  76.         for (int i = 0; i < 8*3-1; i++)
  77.         {
  78.             stripIndices[i*(2*sides+2)] = i*sides;
  79.             for (int j = 1; j < sides+1; j++)
  80.             {
  81.                 stripIndices[i*(2*sides+2)+j*2-1] = (j%sides) + i*sides;
  82.                 stripIndices[i*(2*sides+2)+j*2] = (j%sides) + (i+1)*sides;
  83.             }
  84.             stripIndices[i*(2*sides+2)+sides*2+1] = (i+1)*sides + 1;
  85.             stripLengths[i] = 2*sides+2;
  86.         }
  87.         TriangleStripArray strip = new TriangleStripArray(stripIndices, stripLengths);
  88.         VertexBuffer base = new VertexBuffer();
  89.         base.setPositions(basePositions, .03f, null);
  90.         base.setNormals(normalsArray);
  91.         base.setDefaultColor(0xFF0B7FCC);
  92.         Material material = new Material();
  93.         material.setColor(Material.AMBIENT, 0x124797); // Hybrid darkest blue.
  94.         material.setColor(Material.DIFFUSE, 0xff0B7FCC); // Hybrid dark blue.
  95.         PolygonMode polyMode = new PolygonMode();
  96.         polyMode.setCulling(PolygonMode.CULL_NONE);
  97.         polyMode.setTwoSidedLightingEnable(true);
  98.         Appearance appearance = new Appearance();
  99.         appearance.setMaterial(material);
  100.         appearance.setPolygonMode(polyMode);
  101.         skeleton = new Group();
  102.         bone1 = new Group();
  103.         bone2 = new Group();
  104.         skeleton.addChild(bone1);
  105.         bone1.addChild(bone2);
  106.         iSkinnedMesh = new SkinnedMesh(base, strip, appearance, skeleton);
  107.         iSkinnedMesh.addTransform(bone1, 200, 8*sides, 10*sides);
  108.         iSkinnedMesh.addTransform(bone2, 1, 2*8*sides, 8*sides);
  109.         iLight = new Light();
  110.         iLight.setMode(Light.OMNI);
  111.         iLight.setAttenuation(0.001f, 0.1f, 0.0f);
  112.         iLight.setIntensity(1.0f);
  113.         iLight.setColor(0xFFFFFF);
  114.         iLightTrans = new Transform();
  115.         iLightTrans.postTranslate(-5.f, -5.f, 16.f);
  116.         Graphics3D.getInstance().addLight(iLight, iLightTrans);
  117.         iCamera = new Camera();
  118.         iCamera.setPerspective(90.f, 1.f, 1.f, 150.f);
  119.         Transform cameraTrans = new Transform();
  120.         cameraTrans.postTranslate(0.f, 0.f, 26.f);
  121.         Graphics3D.getInstance().setCamera(iCamera, cameraTrans);
  122.     }
  123. }