package net.npaka.gl10primitiveex2; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView;
//レンダラー public class GLRenderer implements GLSurfaceView.Renderer { private FloatBuffer vertexBuffer;//頂点バッファ //サーフェイス生成時に呼ばれる @Override public void onSurfaceCreated(GL10 gl10,EGLConfig eglConfig) { //頂点配列の有効化 gl10.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//頂点バッファの生成 float[] vertexs={ 0.0f,1.0f,0.0f,//頂点0 0.0f,0.0f,0.0f,//頂点1 1.0f,1.0f,0.0f,//頂点2 0.0f,0.0f,0.0f,//頂点3 1.0f,1.0f,0.0f,//頂点4 1.0f,0.0f,0.0f,//頂点5 }; vertexBuffer=makeFloatBuffer(vertexs); } //画面サイズ変更時に呼ばれる @Override public void onSurfaceChanged(GL10 gl10,int w,int h) { //画面の表示領域の指定 gl10.glViewport(0,0,w,h); } //毎フレーム描画時に呼ばれる @Override public void onDrawFrame(GL10 gl10) { //画面のクリア gl10.glClearColor(1.0f,1.0f,1.0f,1.0f); gl10.glClear(GL10.GL_COLOR_BUFFER_BIT); //色の指定 gl10.glColor4f(1.0f,0.0f,0.0f,1.0f); //頂点バッファの指定 gl10.glVertexPointer(3,GL10.GL_FLOAT,0,vertexBuffer); //四角形の描画 gl10.glDrawArrays(GL10.GL_TRIANGLES,0,6); } //float配列をFloatBufferに変換 private FloatBuffer makeFloatBuffer(float[] array) { FloatBuffer fb=ByteBuffer.allocateDirect(array.length*4).order( ByteOrder.nativeOrder()).asFloatBuffer(); fb.put(array).position(0); return fb; } }
|