サンプルプログラム工場

AAKAKA Appで使われているプログラムのサンプルコードをそのまま公開!

サンプルプログラム工場 > android > OpenGLでポリゴンにテクスチャを張るサンプル#tsGlTexture
Google Play AAKAKAxSOFTへ

OpenGLでポリゴンにテクスチャを張るサンプル#tsGlTexture

実行ファイル(APK)やサンプル(zip)をダウンロードする
tsGlTextureの実行イメージ

テクスチャをロードしてポリゴンにテクスチャを張って表示する

/**
ポリゴンにテクスチャを張って表示する
テクスチャのロードとか
*/
package com.aakaka.tsgltexture;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;


//////////////////////////////////////////////////////////////////////////
public class TsGlTexture extends Activity {
	
	private GLSurfaceView mGlSv;
	private GLTxRenderer mTexRnd;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        this.mGlSv = (GLSurfaceView)this.findViewById(R.id.glsurfaceView1);
        this.mTexRnd = new GLTxRenderer(this);
        this.mGlSv.setRenderer(this.mTexRnd);
        
    }
    
    @Override
    public void onPause() {
    	super.onPause();
    	this.mGlSv.onPause();
    }
    
    @Override
    public void onResume() {
    	super.onResume();
    	this.mGlSv.onResume();
    }
}


package com.aakaka.tsgltexture;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.opengles.GL11Ext;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.opengl.GLUtils;

//////////////////////////////////////////////////////////////////////////
public class GLTxRenderer implements GLSurfaceView.Renderer{

	private Context mContext;	// コンテキスト

	private Square mSquare;
	
	//////////////////////////////////////////////////////////////////////////
	// コンストラクタ
	public GLTxRenderer(Context context) {
		this.mContext = context;
		this.mSquare = new Square();
	}

	//////////////////////////////////////////////////////////////////////////
	// 毎フレーム呼ばれる(ここで描画やらをする)
	public void onDrawFrame(GL10 gl) {
		
		// 背景をクリア
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		
		// マトリックスをリセット
		gl.glLoadIdentity();
		
		// テクスチャを関連づける
		gl.glBindTexture(GL10.GL_TEXTURE_2D, this.mTextures[0]);
		// オブジェクトの位置をずらす
		gl.glTranslatef(0.f, 0.f, -5.f);
		this.mSquare.draw(gl);
	}

	//////////////////////////////////////////////////////////////////////////
	// サーフェイスのサイズが変わったりしたときに呼ばれる
	public void onSurfaceChanged(GL10 gl, int width, int height) {
		// ゼロ割しないように
		if (height == 0)
			height = 1;
		
		gl.glViewport(0, 0, width, height);
		gl.glMatrixMode(GL10.GL_PROJECTION);
		gl.glLoadIdentity();
		
		GLU.gluPerspective(gl, 45.f, (float)width / (float)height, 0.1f, 100.f);
		
		gl.glMatrixMode(GL10.GL_MODELVIEW);
		gl.glLoadIdentity();
	}

	
	private int[] mTextures = new int[1];
	
	//////////////////////////////////////////////////////////////////////////
	// サーフェイスが作られたときに一度だけ呼ばれる。ここでテクスチャのロードとかするといい。
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {

	    // リソースからビットマップを読み込む
		Bitmap bitmap = BitmapFactory.decodeResource(this.mContext.getResources(), R.drawable.ic_contact_picture);
		
		// テクスチャの領域を作る
		gl.glGenTextures(1, this.mTextures, 0);
		// テクスチャの関連づけ
		gl.glBindTexture(GL10.GL_TEXTURE_2D, this.mTextures[0]);
		
		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
		gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
		gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
		gl.glTexEnvf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
		
		// Clear up
		bitmap.recycle();
		
		
		gl.glEnable(GL10.GL_TEXTURE_2D);
		gl.glShadeModel(GL10.GL_SMOOTH);
		gl.glClearColor(0.f, 0.f, 0.f, 0.5f);
		gl.glClearDepthf(1.f);
		gl.glEnable(GL10.GL_DEPTH_TEST);
		gl.glDepthFunc(GL10.GL_LEQUAL);
		
		gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
	}

}

package com.aakaka.tsgltexture;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import javax.microedition.khronos.opengles.GL10;


//////////////////////////////////////////////////////////////////////////
public class Square {
	private FloatBuffer mVtxBuf;
	private float[] mVtx = {
		-1.f, -1.f, 0.f,	// 左下
		-1.f,  1.f, 0.f,	// 左上
		 1.f, -1.f, 0.f,	// 右下
		 1.f,  1.f, 0.f		// 右上
	};
	
	private FloatBuffer mTxBuf;
	private float[] mTx = {
		0.f, 1.f,
		0.f, 0.f,
		1.f, 1.f,
		1.f, 0.f
	};
	//////////////////////////////////////////////////////////////////////////
	public Square() {
		// 頂点バッファを作る
		this.mVtxBuf = ByteBuffer.allocateDirect(this.mVtx.length * 4)
			.order(ByteOrder.nativeOrder())
			.asFloatBuffer();
		// 頂点バッファに頂点データを入れる
		this.mVtxBuf
			.put(this.mVtx)
			.position(0);
		
		// UV座標のバッファを作る
		this.mTxBuf = ByteBuffer.allocateDirect(this.mTx.length * 4)
			.order(ByteOrder.nativeOrder())
			.asFloatBuffer();
		// UV位置を設定する
		this.mTxBuf
			.put(this.mTx)
			.position(0);
		
	}
	
	//////////////////////////////////////////////////////////////////////////
	// 描画
	public void draw(GL10 gl) {
		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
		gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
		
		// 色を設定
		gl.glColor4f(0.f, 1.f, 0.f, 0.5f);
		
		// 頂点情報を設定
		gl.glVertexPointer(3, GL10.GL_FLOAT, 0, this.mVtxBuf);
		gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, this.mTxBuf);
		
		// 三角形を描く
		gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, this.mVtx.length / 3);
		
		// 有効にしたモノを元に戻す
		gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
		gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
	}
}

APKファイルをダウンロード サンプルプロジェクトをダウンロード

, ,

GLSurfaceViewの表示位置を整えるサンプル@tryLayout01a ListView(アイテムの追加・選択・削除・クリア)のサンプル#tryListView00

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>