????
OpenGL ES Cube2 テクスチュア   ( ES: for Embedded Systems )
 OpenGL ES 2.0 の実装から OpenGLContext が廃止されたので、GLSurfaceView class を使うこと。
 → Android.opengl Packageのリファレンス

  

 矩形のZ軸での回転 → テクスチュアを表示

 1. テクスチュアのサイズは 2のべき乗であること
▲ 上へ


テクスチュアの定義(UVマッピング)

float[] texCoords = { // テクスチュア
    0.0f, 1.0f,
     1.0f, 1.0f,
     0.0f, 0.0f,
     1.0f, 0.0f
};


リソースからイメージを読み、テクスチュアバッファを生成する

FloatBuffer mTexture;
Bitmap mBmp;

//ビットマップの読み込み
Resources r = getResources();
mBmp = BitmapFactory.decodeResource(r, R.drawable.dango);

//テクスチュアバッファの生成
mTexture = makeFloatBuffer(texCoords);


テクスチュア関連の設定

//テクスチャの有効化
gl.glEnable(GL10.GL_TEXTURE_2D);

//テクスチャ配列の指定
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTexture); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

//テクスチャの読み込み&バインド
mTextureID = loadTexture(gl, mBmp);
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);

//背景のクリア
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
gl.glClearDepthf(1.0f);

//モデルビュー行列の指定
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity(); GLU.gluOrtho2D(gl, -1.0f, 1.0f, -1.0f, 1.0f);


loadTexture
public static int loadTexture(GL10 gl, Bitmap bitmap) {
  int width = bitmap.getWidth();
  int height = bitmap.getHeight();

   //画像データの生成
   ByteBuffer bb = ByteBuffer.allocateDirect(height*width*4);
   bb.order(ByteOrder.BIG_ENDIAN);
   IntBuffer ib=bb.asIntBuffer();

   for (int y=height-1;y>-1;y--) {
     for (int x=0;x<width;x++) {
      int pix=bitmap.getPixel(x,height-y-1);
      int alpha=((pix>>24)&0xFF);
      int red =((pix>>16)&0xFF);
      int green=((pix>>8)&0xFF);
      int blue =((pix)&0xFF);
      ib.put((red<<24)+(green<<16)+(blue<<8)+alpha);
     }
   }

   ib.position(0);
   bb.position(0);

   int[] textureName=new int[1];

   //テクスチャの設定
   gl.glGenTextures(1,textureName,0);
  int texID = textureName[0];

  gl.glBindTexture(GL10.GL_TEXTURE_2D,textureName[0]);
  gl.glTexImage2D(GL10.GL_TEXTURE_2D,0,GL10.GL_RGBA,width,height,
             0,GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE,bb);
  gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR);
  gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_LINEAR);

  return texID;
}



CRIMSON Systems Homeへ Copyright (C) CRIMSON Systems