Back to project page opengl.
The source code is released under:
Apache License
If you think the Android project opengl listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package edu.cs4730.OpenGlDemo1; /*from w w w . ja v a 2 s .c o m*/ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.IntBuffer; //there is both GL10 Es 1.0 and GL11 ES 1.1 //much of GL11 subclasses GL10, but some methods only take GL10. import javax.microedition.khronos.opengles.GL10; import javax.microedition.khronos.opengles.GL11; /* * A vertex shaded square */ public class Square { private FloatBuffer mFVertexBuffer; private ByteBuffer mColorBuffer; private ByteBuffer mIndexBuffer; public Square() { //we are defining our square. For larger objects, we would likely read this in from a file. float vertices[] = { -1.0f, 1.0f, -1.0f, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, }; byte maxColor=(byte)255; //we are defining colors similar to the square //where there are four components: red, green, blue, and alpha (transparency) //These map directory to our 4 vertices in the square. //using bytes, instead of floats is for space saving (plus floats will get converted to bytes anyway, so save both space and time) byte colors[] = { maxColor, 0, 0, maxColor, maxColor, 0,0, maxColor, maxColor,0,0,maxColor, maxColor,0,0,maxColor }; /* byte colors[] = { maxColor, maxColor, 0, maxColor, 0, maxColor,maxColor, maxColor, 0,0,0,maxColor, maxColor,0,maxColor,maxColor }; */ // this matches up the vertices to specific triangles, the first triples says vertices 0,3,1 make triangle 0, byte indices[] = { 0, 1, 2, 0, 2, 3 }; //The rest matches up everything, converts their internal java formats to the OpenGL //mainly makes sure the ordering of the bytes is correctly, otherwise depending on hardware, they might get reversed. ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4); vbb.order(ByteOrder.nativeOrder()); mFVertexBuffer = vbb.asFloatBuffer(); mFVertexBuffer.put(vertices); mFVertexBuffer.position(0); mColorBuffer = ByteBuffer.allocateDirect(colors.length); mColorBuffer.put(colors); mColorBuffer.position(0); mIndexBuffer = ByteBuffer.allocateDirect(indices.length); mIndexBuffer.put(indices); mIndexBuffer.position(0); } /* * method called when we want to render this square. * in this case, from SquareRenderer.drawFrame() */ public void draw(GL10 gl) { //tell openGL how the vertices are ordering their faces //this is both for efficiently so openGL can ignore the "backside" and not attempt to draw it. gl.glFrontFace(GL11.GL_CCW); //counter clockwise, so any counter triangles are ignored. //send the buffers to the renderer //specific the number of elements per vertex, which there are 2. gl.glVertexPointer(2, GL11.GL_FLOAT, 0, mFVertexBuffer); //8 //color buffer is added, with the size of the 4 elements gl.glColorPointer(4, GL11.GL_UNSIGNED_BYTE, 0, mColorBuffer); //9 //finally draw the element, we the connectivity array, using triangles //could also be triangle lists, points or lines gl.glDrawElements(GL11.GL_TRIANGLES, 6, GL11.GL_UNSIGNED_BYTE, mIndexBuffer); //return the openGL back to the default value. gl.glFrontFace(GL11.GL_CCW); //11 } }