戻る

http://code.google.com/p/rokon/downloads/list

Open GL †

GLをスーパークラスとして、OpenGL ES 1.0を実装したGL10、
GL10を継承したGL11などが含まれていることがわかります。 つまり、Android 1.0/1.1/1.5 SDKには、OpenGL ES 1.1のための主要なAPIが含まれているんだけど、
それらは完全ではないので使わないで。。。
といったこところでしょうか。

Android NDKがOpenGLに対応
Android NDK r3 以降でOpen GLに直接アクセスできるようになっている。

描画の高速化 †

結果からいうと「2D描画で高速表示を行うにはOpenGL ESを用いるのがよく、その中でも『Draw Texture Extension』というOpenGLの拡張を用いるのが最速だ」と分かった。

ステップ1:背景を灰色で塗り潰すOpenGLプログラム †

画面 †

test02.jpg


サンプル プログラム †

package com.chinsanSoft;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.opengl.GLSurfaceView;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

public class test02 extends Activity {
   private GLSurfaceView mChinSurfaceView;

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       mChinSurfaceView = new GLSurfaceView(this);
       mChinSurfaceView.setRenderer(new ChinTutorial());
       setContentView(mChinSurfaceView);
   }
}

class ChinTutorial implements GLSurfaceView.Renderer {

  public ChinTutorial( ) {
   }
   

    public void onDrawFrame(GL10 gl){
   //protected void drawFrame(GL10 gl) {
       //背景塗り潰し
       gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
   }

    public void onSurfaceChanged(GL10 gl, int width, int height) {
    }

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        //背景塗り潰し色の指定
        gl.glClearColor(0.5f,0.5f,0.5f,1);
        
        //カラーとテクスチャ座標の補間精度 高速
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST);
    }

}




ステップ2:四角形で塗り潰すOpenGLプログラム †

画面 †

test03.jpg


サンプル プログラム †

package com.chinsanSoft;

// 四角形を2Dで表示するプログラム
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.opengl.*;
import java.nio.*;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

public class test03_3d extends Activity {
   private GLSurfaceView mChinSurfaceView;
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       mChinSurfaceView = new GLSurfaceView(this);
       mChinSurfaceView.setRenderer(new ChinTutorialOne());
       setContentView(mChinSurfaceView);
   }
}


class ChinTutorialOne implements GLSurfaceView.Renderer {

   float[] square=new float[] {//頂点     
           -0.25f,-0.25f,0.0f,
            0.25f,-0.25f,0.0f,
           -0.25f, 0.25f,0.0f,
            0.25f, 0.25f,0.0f};

   FloatBuffer squareBuff ;//頂点バッファ	
	
	
  public ChinTutorialOne(/*Context c*/) {
	    squareBuff=getFloatBuffer(square);//頂点バッファ	
       //super(c);
   }

   
  	private FloatBuffer getFloatBuffer(float [] array){
		FloatBuffer floatBuffer;
		ByteBuffer bb = ByteBuffer.allocateDirect(array.length * 4);
		bb.order(ByteOrder.nativeOrder());
		floatBuffer = bb.asFloatBuffer();
		floatBuffer.put(array);
		floatBuffer.position(0);
		return floatBuffer;
	}
 
    public void onDrawFrame(GL10 gl){
   //protected void drawFrame(GL10 gl) {
       //背景塗り潰し
       gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);

       //モデルビュー行列の指定
       gl.glMatrixMode(GL10.GL_MODELVIEW);
       gl.glLoadIdentity();
       gl.glTranslatef(0,0,-1);//平行移動
       
       //色の指定
       gl.glColor4f(1,0,0,0.5f);
       
       //頂点配列の指定
       gl.glVertexPointer(3,GL10.GL_FLOAT,0,squareBuff);
       gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
       
       //プリミティブの描画
       gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,4);
       
    
    }

    public void onSurfaceChanged(GL10 gl, int width, int height) {
    }

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        //背景塗り潰し色の指定
        gl.glClearColor(0.5f,0.5f,0.5f,1);
        
        //カラーとテクスチャ座標の補間精度-高速
        //gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST);

        //射影行列の指定
        gl.glMatrixMode(GL10.GL_PROJECTION);
        gl.glLoadIdentity();
        GLU.gluOrtho2D(gl,0.0f,1.2f,0.0f,1.0f);//平行投影
    }




ステップ3:立方体を表示する OpenGLプログラム †

画面 †

test04.jpg


サンプル プログラム †




モデリング †

ポリゴン表示とテクスチャ表示ができたら、次にやりたくなるのは自分でモデリングしたオブジェクトを表示させること http://ronor.blog81.fc2.com/blog-category-1.html


Wiki TOP   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS