Android Open Source - min3d Example Multi Texture






From Project

Back to project page min3d.

License

The source code is released under:

MIT License

If you think the Android project min3d listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.min3d;
// w  w  w .jav  a2s .c om
import android.graphics.Bitmap;

import com.min3d.lib.Shared;
import com.min3d.lib.Utils;
import com.min3d.lib.core.Object3dContainer;
import com.min3d.lib.core.RendererActivity;
import com.min3d.lib.objectPrimitives.Box;
import com.min3d.lib.objectPrimitives.Sphere;
import com.min3d.lib.vos.Light;
import com.min3d.lib.vos.TexEnvxVo;
import com.min3d.lib.vos.TextureVo;

import javax.microedition.khronos.opengles.GL10;

/**
 * This is the most complex example, for now.
 * 
 * Demonstrates:
 * - How to add multiple textures to an object (2, in this case)
 * - How to change 'texture environent' settings on a texture 
 * 
 * In this example, a sphere has an image of jupiter as its first texture.
 * Its second texture is a plain white image with a transparent 'hole' in the middle.
 * We'll see what's the effect of applying different texture environment 'blend modes'
 * to the second texture.  
 *  
 * @author Lee
 */
public class ExampleMultiTexture extends RendererActivity
{
  Object3dContainer _cube;
  Object3dContainer _sphere;
  
  TextureVo _jupiterTexture;
  TextureVo _alphaTexture;
  
  TexEnvxVo _alphaTextureEnv;
  
  int _count = 0;
  
  public void initScene() 
  {
    Light light = new Light();
    light.ambient.setAll(0xff888888);
    light.position.setAll(3,0,3);
    scene.lights().add(light);

    // Create objects
    
    // * Note:
    // ------- 
    // While the order in which objects are drawn is not important in terms of
    // z-ordering (which is taken care of automatically by OpenGL), the order 
    // _is_ important when it comes to transparency. Here, for the transparency
    // of the "_jupiter" sphere to be apparent, it must added as the second child
    // of the scene (which means it will be drawn second). The engine does not 
    // manage this automatically for you.

    _cube = new Box(1.3f,1.3f,1.3f);
    _cube.position().x = +0.4f;
    _cube.normalsEnabled(false);
    scene.addChild(_cube);

    _sphere = new Sphere(.8f, 12, 9);
    _sphere.position().x = -0.2f;
    _sphere.position().z = 1f;
    scene.addChild(_sphere);

    // Add textures in TextureManager
    
    Bitmap b;
    
    b = Utils.makeBitmapFromResourceId(R.drawable.jupiter);
    Shared.textureManager().addTextureId(b, "jupiter", false);
    b.recycle();
    
    b = Utils.makeBitmapFromResourceId(R.drawable.white_with_alpha_hole);
    Shared.textureManager().addTextureId(b, "alpha", false);
    b.recycle();
    
    // Add textures to sphere
    _sphere.textures().addById("jupiter");
    TextureVo texture = _sphere.textures().addById("alpha");
    
    // We saved a reference to the sphere's "alpha" texture above so we can target 
    // its texture environment VO, which we will change around in the loop below.
    _alphaTextureEnv = texture.textureEnvs.get(0);
    
    _count = 0;
  }
  
  @Override 
  public void updateScene() 
  {
    _cube.rotation().x -= .4f;
    _cube.rotation().y -= .6f;
    _sphere.rotation().y += 3;
    
    // Cycle thru the texture environment 'blend modes' just so
    // we can see what they all look like...
    
    if (_count % 1000 == 0) {
      _alphaTextureEnv.setAll(GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE); // .. default
    }
    else if (_count % 1000 == 200) {
      _alphaTextureEnv.setAll(GL10.GL_TEXTURE_ENV_MODE, GL10.GL_BLEND);
    }
    else if (_count % 1000 == 400) {
      _alphaTextureEnv.setAll(GL10.GL_TEXTURE_ENV_MODE, GL10.GL_ADD);
    }
    else if (_count % 1000 == 600) {
      // Note, this is the correct setting if you're just interested  
      // in layering one bitmap that has some transparency on top of another,
      // without altering the color or alpha of the either.
      _alphaTextureEnv.setAll(GL10.GL_TEXTURE_ENV_MODE, GL10.GL_DECAL);
    }
    else if (_count % 1000 == 800) {
      _alphaTextureEnv.setAll(GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);
    }
      
    _count++;
    
    
    // *
    //
    // Lastly, note that TextureVo holds not just one TextureEnvVo, but an ArrayList of them. 
    // So you can send a series of "glTexEnvx" commands, as if you were typing them out  
    // manually, to create more complex blending/layering effects.
    //
    // See http://www.khronos.org/opengles/sdk/1.1/docs/man/glTexEnv.xml
  }
}




Java Source Code List

com.min3d.ApplicationTest.java
com.min3d.ExampleAccelerometer.java
com.min3d.ExampleAnimatedTexture.java
com.min3d.ExampleAnimatingVertices.java
com.min3d.ExampleAssigningTexturesDynamically.java
com.min3d.ExampleCamera.java
com.min3d.ExampleFog.java
com.min3d.ExampleFromScratch.java
com.min3d.ExampleInsideLayout.java
com.min3d.ExampleKeyframeAnimation.java
com.min3d.ExampleLightProperties.java
com.min3d.ExampleLoad3DSFile.java
com.min3d.ExampleLoadMD2File.java
com.min3d.ExampleLoadObjFileMultiple.java
com.min3d.ExampleLoadObjFile.java
com.min3d.ExampleMipMap.java
com.min3d.ExampleMostMinimal.java
com.min3d.ExampleMultiTexture.java
com.min3d.ExampleMultipleLights.java
com.min3d.ExampleRenderType.java
com.min3d.ExampleRotatingPlanets.java
com.min3d.ExampleSubsetOfFaces.java
com.min3d.ExampleTextureOffset.java
com.min3d.ExampleTextureWrap.java
com.min3d.ExampleTextures.java
com.min3d.ExampleTransparentGlSurface.java
com.min3d.ExampleVertexColors.java
com.min3d.ExampleVerticesVariations.java
com.min3d.ScratchActivity.java
com.min3d.SplashActivity.java
com.min3d.lib.AParser.java
com.min3d.lib.ApplicationTest.java
com.min3d.lib.IParser.java
com.min3d.lib.LittleEndianDataInputStream.java
com.min3d.lib.MD2Parser.java
com.min3d.lib.Max3DSParser.java
com.min3d.lib.Min3d.java
com.min3d.lib.ObjParser.java
com.min3d.lib.ParseObjectData.java
com.min3d.lib.ParseObjectFace.java
com.min3d.lib.Parser.java
com.min3d.lib.Shared.java
com.min3d.lib.Utils.java
com.min3d.lib.animation.AnimationObject3d.java
com.min3d.lib.animation.KeyFrame.java
com.min3d.lib.core.Color4BufferList.java
com.min3d.lib.core.FacesBufferedList.java
com.min3d.lib.core.ManagedLightList.java
com.min3d.lib.core.Number3dBufferList.java
com.min3d.lib.core.Object3dContainer.java
com.min3d.lib.core.Object3d.java
com.min3d.lib.core.RenderCaps.java
com.min3d.lib.core.RendererActivity.java
com.min3d.lib.core.Renderer.java
com.min3d.lib.core.Scene.java
com.min3d.lib.core.TextureList.java
com.min3d.lib.core.TextureManager.java
com.min3d.lib.core.UvBufferList.java
com.min3d.lib.core.Vertices.java
com.min3d.lib.interfaces.IDirtyManaged.java
com.min3d.lib.interfaces.IDirtyParent.java
com.min3d.lib.interfaces.IObject3dContainer.java
com.min3d.lib.interfaces.ISceneController.java
com.min3d.lib.objectPrimitives.Box.java
com.min3d.lib.objectPrimitives.HollowCylinder.java
com.min3d.lib.objectPrimitives.Rectangle.java
com.min3d.lib.objectPrimitives.SkyBox.java
com.min3d.lib.objectPrimitives.Sphere.java
com.min3d.lib.objectPrimitives.Torus.java
com.min3d.lib.vos.AbstractDirtyManaged.java
com.min3d.lib.vos.BooleanManaged.java
com.min3d.lib.vos.CameraVo.java
com.min3d.lib.vos.Color4Managed.java
com.min3d.lib.vos.Color4.java
com.min3d.lib.vos.Face.java
com.min3d.lib.vos.FloatManaged.java
com.min3d.lib.vos.FogType.java
com.min3d.lib.vos.FrustumManaged.java
com.min3d.lib.vos.LightType.java
com.min3d.lib.vos.Light.java
com.min3d.lib.vos.Number3dManaged.java
com.min3d.lib.vos.Number3d.java
com.min3d.lib.vos.RenderType.java
com.min3d.lib.vos.ShadeModelManaged.java
com.min3d.lib.vos.ShadeModel.java
com.min3d.lib.vos.TexEnvxVo.java
com.min3d.lib.vos.TextureVo.java
com.min3d.lib.vos.Uv.java
com.min3d.lib.vos.Vertex3d.java