protected void initScene() {
      PointLight light = new PointLight();
      light.setZ(6);
      light.setPower(2);

      getCurrentScene().addLight(light);

      Texture jetTexture = new Texture("jetTexture", R.drawable.jettexture);
      SphereMapTexture sphereMapTexture =
          new SphereMapTexture("manilaSphereMapTex", R.drawable.manila_sphere_map);

      jetTexture.setInfluence(.8f);
      // -- important!
      sphereMapTexture.isEnvironmentTexture(true);
      sphereMapTexture.setInfluence(.2f);

      Object3D jet1 = null;
      // -- sphere map with texture

      try {
        Material material1 = new Material();
        material1.enableLighting(true);
        material1.setDiffuseMethod(new DiffuseMethod.Lambert());
        material1.addTexture(jetTexture);
        material1.addTexture(sphereMapTexture);

        ObjectInputStream ois;
        ois = new ObjectInputStream(mContext.getResources().openRawResource(R.raw.jet));
        jet1 = new Object3D((SerializedObject3D) ois.readObject());
        jet1.setMaterial(material1);
        jet1.setY(2.5f);
        addChild(jet1);
      } catch (Exception e) {
        e.printStackTrace();
      }

      Vector3 axis = new Vector3(2, -4, 1);
      axis.normalize();

      Animation3D anim1 = new RotateAnimation3D(axis, 360);
      anim1.setRepeatMode(RepeatMode.INFINITE);
      anim1.setDuration(12000);
      anim1.setTransformable3D(jet1);
      registerAnimation(anim1);
      anim1.play();

      sphereMapTexture = new SphereMapTexture("manilaSphereMapTex2", R.drawable.manila_sphere_map);
      sphereMapTexture.isEnvironmentTexture(true);
      sphereMapTexture.setInfluence(.5f);

      Material material2 = new Material();
      // -- important, indicate that we want to mix the sphere map with a color
      material2.enableLighting(true);
      material2.setDiffuseMethod(new DiffuseMethod.Lambert());
      try {
        material2.addTexture(sphereMapTexture);
      } catch (TextureException e) {
        e.printStackTrace();
      }
      material2.setColorInfluence(.5f);

      Object3D jet2 = jet1.clone(false);
      jet2.setMaterial(material2);
      // -- also specify a color
      jet2.setColor(0xff666666);
      jet2.setY(-2.5f);
      addChild(jet2);

      Animation3D anim2 = new RotateAnimation3D(axis, -360);
      anim2.setRepeatMode(RepeatMode.INFINITE);
      anim2.setDuration(12000);
      anim2.setTransformable3D(jet2);
      registerAnimation(anim2);
      anim2.play();

      getCurrentCamera().setPosition(0, 0, 14);
    }
Пример #2
0
    public void setMaterial(Object3D object, String materialName) throws TextureException {
      MaterialDef matDef = null;

      for (int i = 0; i < mMaterials.size(); ++i) {
        if (mMaterials.get(i).name.equals(materialName)) {
          matDef = mMaterials.get(i);
          break;
        }
      }

      boolean hasTexture = matDef != null && matDef.diffuseTexture != null;
      boolean hasBump = matDef != null && matDef.bumpTexture != null;
      boolean hasSpecularTexture = matDef != null && matDef.specularColorTexture != null;
      boolean hasSpecular =
          matDef != null && matDef.specularColor > 0xff000000 && matDef.specularCoefficient > 0;

      AMaterial mat = null;

      if (hasSpecular && !hasBump) mat = new PhongMaterial();
      else if (hasBump && !hasSpecularTexture) mat = new NormalMapMaterial();
      else if (hasBump && hasSpecularTexture) mat = new NormalMapPhongMaterial();
      else mat = new DiffuseMaterial();

      mat.setUseSingleColor(!hasTexture);
      object.setMaterial(mat);
      object.setColor(
          matDef != null ? matDef.diffuseColor : (0xff000000 + ((int) (Math.random() * 0xffffff))));
      if (hasSpecular || hasSpecularTexture) {
        PhongMaterial phong = (PhongMaterial) mat;
        phong.setSpecularColor(matDef.specularColor);
        phong.setShininess(matDef.specularCoefficient);
      }

      if (hasTexture) {
        RajLog.i("hastex " + object.getName() + ", " + matDef.diffuseTexture);
        if (mFile == null) {
          int identifier =
              mResources.getIdentifier(
                  getFileNameWithoutExtension(matDef.diffuseTexture), "drawable", mResourcePackage);
          mat.addTexture(new Texture(identifier));
        } else {
          String filePath =
              mFile.getParent() + File.separatorChar + getOnlyFileName(matDef.diffuseTexture);
          mat.addTexture(
              new Texture(
                  getOnlyFileName(matDef.diffuseTexture), BitmapFactory.decodeFile(filePath)));
        }
      }
      if (hasBump) {
        if (mFile == null) {
          int identifier =
              mResources.getIdentifier(
                  getFileNameWithoutExtension(matDef.bumpTexture), "drawable", mResourcePackage);
          mat.addTexture(new NormalMapTexture(identifier));
        } else {
          String filePath =
              mFile.getParent() + File.separatorChar + getOnlyFileName(matDef.bumpTexture);
          mat.addTexture(
              new NormalMapTexture(
                  getOnlyFileName(matDef.bumpTexture), BitmapFactory.decodeFile(filePath)));
        }
      }
      if (hasSpecularTexture) {
        if (mFile == null) {
          int identifier =
              mResources.getIdentifier(
                  getFileNameWithoutExtension(matDef.specularColorTexture),
                  "drawable",
                  mResourcePackage);
          mat.addTexture(new SpecularMapTexture(identifier));
        } else {
          String filePath =
              mFile.getParent() + File.separatorChar + getOnlyFileName(matDef.specularColorTexture);
          mat.addTexture(
              new SpecularMapTexture(
                  getOnlyFileName(matDef.specularColorTexture),
                  BitmapFactory.decodeFile(filePath)));
        }
      }
    }