''[[MobileApp>Mobile Application 入門]]'' > ''[[Android>Android]]'' > ''Open GL''

~
~

RIGHT:[[English>http://ee72078.moo.jp/chinsan/e/MobileApp/index.php?Android%20Open%20GL]]
*Open GL [#sdd36a90]
 GLをスーパークラスとして、OpenGL ES 1.0を実装したGL10、~
 GL10を継承したGL11などが含まれている~
 Android には、OpenGL ES 1.1のための主要なAPIが含まれいる

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


//*描画の高速化 [#vb8aa8e7]
//
// 「2D描画で高速表示を行うにはOpenGL ESを用いるのがよく~
// 中でも『Draw Texture Extension』というOpenGLの拡張を用いるのが最速
//

*ステップ1:背景を灰色で塗り潰すOpenGLプログラム [#rd338724]
***画面 [#v6c2ac74]

#ref(test02.jpg);

~
***サンプル プログラム [#ifb129b5]

 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プログラム [#rd338724]
***画面 [#webdcf85]

#ref(test03.jpg);
~
***サンプル プログラム [#g0dee929]

 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プログラム [#l5c1c965]
***画面 [#cdde034d]

#ref(test04.jpg);
~
***サンプル プログラム [#vfbfb687]

~
~
   工事中

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


*参考 [#u1f0936f]
  http://code.google.com/p/rokon/downloads/list


~
~
  ''[[戻る>Android]]''

Wiki TOP   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS