コードを書いておく。ただそれだけ。
package info.justoneplanet.android.glsample; 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 javax.microedition.khronos.opengles.GL11; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Bitmap.Config; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.opengl.GLSurfaceView; import android.opengl.GLU; import android.opengl.GLUtils; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.SurfaceView; public class MainActivity extends Activity { private GLSurfaceView gLSurfaceView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gLSurfaceView = new GLSurfaceView(this); gLSurfaceView.setRenderer(new Renderer()); setContentView(gLSurfaceView); } @Override public void onPause() { super.onPause(); gLSurfaceView.onPause(); } @Override public void onResume() { super.onResume(); gLSurfaceView.onResume(); } private class Renderer implements GLSurfaceView.Renderer { @Override public void onDrawFrame(GL10 gl) { gl.glClearColor(0.0f, 1.0f, 1.0f, 1.0f); gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // camera { gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); GLU.gluPerspective(gl, 45.0f, 1.0f, 0.01f, 100.0f); GLU.gluLookAt(gl, 0, 0, 10.0f, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f); } // vertices { final float one = 1.0f; final float[] vertices = new float[]{ one, one, one, one, one, -one, -one, one, one, -one, one, -one, one, -one, one, one, -one, -one, -one, -one, one, -one, -one, -one, }; FloatBuffer fb = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer(); fb.put(vertices); fb.position(0); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fb); } { gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glRotatef(1.0f, 0, 1, 0);// 回転 } { final byte[] indices = new byte[]{0, 1, 2, 3, 6, 7, 4, 5, 0, 1}; ByteBuffer bb = ByteBuffer.allocateDirect(indices.length).order(ByteOrder.nativeOrder()); bb.put(indices); bb.position(0); gl.glColor4f(0, 1, 0, 1); gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, bb.capacity(), GL10.GL_UNSIGNED_BYTE, bb); } { final byte[] indices = new byte[]{1, 5, 3, 7}; ByteBuffer bb = ByteBuffer.allocateDirect(indices.length).order(ByteOrder.nativeOrder()); bb.put(indices); bb.position(0); gl.glColor4f(0, 0, 1, 1); gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, bb.capacity(), GL10.GL_UNSIGNED_BYTE, bb); } { final byte[] indices = new byte[]{0, 2, 4, 6}; ByteBuffer bb = ByteBuffer.allocateDirect(indices.length).order(ByteOrder.nativeOrder()); bb.put(indices); bb.position(0); gl.glColor4f(1, 0, 0, 1); gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, bb.capacity(), GL10.GL_UNSIGNED_BYTE, bb); } } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { } } }
package info.justoneplanet.android.glsample; 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 javax.microedition.khronos.opengles.GL11; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Bitmap.Config; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.opengl.GLSurfaceView; import android.opengl.GLU; import android.opengl.GLUtils; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.SurfaceView; public class MainActivity extends Activity { private GLSurfaceView gLSurfaceView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gLSurfaceView = new GLSurfaceView(this); gLSurfaceView.setRenderer(new Renderer()); setContentView(gLSurfaceView); } @Override public void onPause() { super.onPause(); gLSurfaceView.onPause(); } @Override public void onResume() { super.onResume(); gLSurfaceView.onResume(); } private class Renderer implements GLSurfaceView.Renderer { @Override public void onDrawFrame(GL10 gl) { gl.glClearColor(0.0f, 1.0f, 1.0f, 1.0f); gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // camera { gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); GLU.gluPerspective(gl, 45.0f, 1.0f, 0.01f, 100.0f); GLU.gluLookAt(gl, 0, 5.0f, 5.0f, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f); } // vertices { final float one = 1.0f; final float[] vertices = new float[]{ one, one, one, one, one, -one, -one, one, one, -one, one, -one, one, -one, one, one, -one, -one, -one, -one, one, -one, -one, -one, }; FloatBuffer fb = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer(); fb.put(vertices); fb.position(0); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fb); } { gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glRotatef(1.0f, 0, 1, 0);// 回転 } { final byte[] indices = new byte[]{ 0, 1, 2, 2, 1, 3, 2, 3, 6, 6, 3, 7, 6, 7, 4, 4, 7, 5, 4, 5, 0, 0, 5, 1, 1, 5, 3, 3, 5, 7, 0, 2, 4, 4, 2, 6, }; ByteBuffer bb = ByteBuffer.allocateDirect(indices.length).order(ByteOrder.nativeOrder()); bb.put(indices); bb.position(0); gl.glColor4f(1, 1, 0, 1); gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, bb.capacity(), GL10.GL_UNSIGNED_BYTE, bb); } } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { } } }
package info.justoneplanet.android.glsample; 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 javax.microedition.khronos.opengles.GL11; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Bitmap.Config; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.opengl.GLSurfaceView; import android.opengl.GLU; import android.opengl.GLUtils; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.SurfaceView; public class MainActivity extends Activity { private GLSurfaceView gLSurfaceView; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gLSurfaceView = new GLSurfaceView(this); gLSurfaceView.setRenderer(new Renderer()); setContentView(gLSurfaceView); } @Override public void onPause() { super.onPause(); gLSurfaceView.onPause(); } @Override public void onResume() { super.onResume(); gLSurfaceView.onResume(); } private class Renderer implements GLSurfaceView.Renderer { private float aspect = 0.0f; private int vertices = 0; private int indices = 0; private int indicesLength; @Override public void onDrawFrame(GL10 gl) { gl.glClearColor(0.0f, 1.0f, 1.0f, 1.0f); gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // camera { gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); GLU.gluPerspective(gl, 45.0f, 1.0f, 0.01f, 100.0f); GLU.gluLookAt(gl, 0, 5.0f, 5.0f, 0, 0, 0.0f, 0.0f, 1.0f, 0.0f); } { gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glRotatef(1.0f, 0, 1, 0); } GL11 gl11 = (GL11) gl; gl11.glDrawElements(GL10.GL_TRIANGLES, indicesLength, GL10.GL_UNSIGNED_BYTE, 0); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { aspect = (float) width / (float) height; gl.glViewport(0, 0, width, height); GL11 gl11 = (GL11) gl; { int[] buffer = new int[2]; gl11.glGenBuffers(2, buffer, 0); vertices = buffer[0]; indices = buffer[1]; } // vertices { final float one = 1.0f; final float[] vertices = new float[]{ one, one, one, one, one, -one, -one, one, one, -one, one, -one, one, -one, one, one, -one, -one, -one, -one, one, -one, -one, -one, }; FloatBuffer fb = ByteBuffer.allocateDirect(vertices.length * 4).order(ByteOrder.nativeOrder()).asFloatBuffer(); fb.put(vertices); fb.position(0); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, this.vertices); gl11.glBufferData(GL11.GL_ARRAY_BUFFER, fb.capacity() * 4, fb, GL11.GL_STATIC_DRAW); gl11.glVertexPointer(3, GL10.GL_FLOAT, 0, 0); } { final byte[] indices = new byte[]{ 0, 1, 2, 2, 1, 3, 2, 3, 6, 6, 3, 7, 6, 7, 4, 4, 7, 5, 4, 5, 0, 0, 5, 1, 1, 5, 3, 3, 5, 7, 0, 2, 4, 4, 2, 6, }; ByteBuffer bb = ByteBuffer.allocateDirect(indices.length).order(ByteOrder.nativeOrder()); bb.put(indices); indicesLength = bb.capacity(); bb.position(0); gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, this.indices); gl11.glBufferData(GL11.GL_ELEMENT_ARRAY_BUFFER, bb.capacity(), bb, GL11.GL_STATIC_DRAW); } } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { } } }