![]() |
|
矩形の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; } |
![]() |
Copyright (C) CRIMSON Systems |