package net.mitchtech.ioio; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.opengles.GL10; public class SnowCube { private FloatBuffer m_vertexBuffer; private FloatBuffer m_colorBuffer; private ByteBuffer m_indexBuffer; // »ï°¢Çü ÁÂÇ¥ ÀÔ·Â private float vertices[] = {-1.0f, -1.0f, -0.3f, 1.0f, -1.0f, -0.3f, 1.0f, 1.0f, -0.3f, -1.0f, 1.0f, -0.3f, -1.0f, -1.0f, 0.3f, 1.0f, -1.0f, 0.3f, 1.0f, 1.0f, 0.3f, -1.0f, 1.0f, 0.3f,}; private float colors[] = { 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.5f, 0.0f, 1.0f, 1.0f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, }; private byte indices[] = { 0, 4, 5, 0, 5, 1, 1, 5, 6, 1, 6, 2, 2, 6, 7, 2, 7, 3, 3, 7, 4, 3, 4, 0, 4, 7, 6, 4, 6, 5, 3, 0, 1, 3, 1, 2, }; public SnowCube() { ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4); byteBuf.order(ByteOrder.nativeOrder()); m_vertexBuffer = byteBuf.asFloatBuffer(); m_vertexBuffer.put(vertices); m_vertexBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(colors.length * 4); byteBuf.order(ByteOrder.nativeOrder()); m_colorBuffer = byteBuf.asFloatBuffer(); m_colorBuffer.put(colors); m_colorBuffer.position(0); m_indexBuffer = ByteBuffer.allocateDirect(indices.length); m_indexBuffer.put(indices); m_indexBuffer.position(0); } public void draw(GL10 gl) { gl.glFrontFace(GL10.GL_CW); // ½Ã°è¹æÇ⠱׸®±â ¼³Á¤ // VertexPointer ¹× ColorPointer ¼³Á¤ gl.glVertexPointer(3, GL10.GL_FLOAT, 0, m_vertexBuffer); gl.glColorPointer(4, GL10.GL_FLOAT, 0, m_colorBuffer); // Vertex Array ¹× Color Array »ç¿ë °¡´ÉÇϵµ·Ï ¼³Á¤ gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // »ï°¢Çü Strip ±×¸®±â gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_BYTE, m_indexBuffer); // Vertex Array ¹× Color Array »ç¿ë »óŸ¦ ´Ù½Ã ºÒ°¡´ÉÇϵµ·Ï ¼³Á¤ gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glDisableClientState(GL10.GL_COLOR_ARRAY); } }