当前位置:首页 > Android 3D绘图Renderer源码
MainActivity.java:源码
package com.example.glrender;
import android.opengl.GLSurfaceView; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.Window;
public class MainActivity extends Activity { GLRender render=new GLRender(); @Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE); GLSurfaceView GLSur=new GLSurfaceView(this); GLSur.setRenderer(render); setContentView(GLSur); }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu); return true; } }
GLRender.java:源码
package com.example.glrender;
import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.IntBuffer; import java.nio.ShortBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL; import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer; import android.opengl.GLU;
public class GLRender implements Renderer { FloatBuffer floatpointer; ShortBuffer shortindex; IntBuffer myColorBuffer; short[] coords1; float angle =0;
public GLRender() { super();
float[] coords = { 0f,0.5f,0f,
-0.5f,0f,-0.5f, 0.5f,0f,-0.5f,
-0.5f,0f,0.5f, 0.5f,0f,0.5f,
-0.5f,0f,-0.5f, -0.5f,0f,0.5f,
0.5f,0f,-0.5f, 0.5f,0f,0.5f,
0.5f,-0.5f,-0.5f, -0.5f,-0.5f,-0.5f,
0.5f,-0.5f,0.5f, -0.5f,-0.5f,0.5f,
-0.5f,-0.5f,-0.5f, -0.5f,-0.5f,0.5f,
0.5f,-0.5f,-0.5f, 0.5f,-0.5f,0.5f,
0.4f,0.5f,-0.5f, 0.5f,0.5f,-0.5f,
0.4f,0f,-0.5f,
};
// TODO Auto-generated constructor stub
ByteBuffer vbb=ByteBuffer.allocateDirect(coords.length*4); vbb.order(ByteOrder.nativeOrder()); floatpointer=vbb.asFloatBuffer();
for (int i = 0; i < (coords.length)/3; i++) { for(int j = 0; j < 3; j++) {
floatpointer.put(coords[i*3+j]); } }
floatpointer.position(0);
coords1=new short[]{0,1,2, 0,3,4, 0,5,6, 0,7,8, 1,2,9, 1,9,10, 3,4,11, 3,11,12, 5,6,13, 6,13,14, 7,8,15, 8,15,16, 10,11,12, 11,12,13, 2,17,18, 2,17,19};
ByteBuffer bbf=ByteBuffer.allocateDirect(coords1.length*2); bbf.order(ByteOrder.nativeOrder()); shortindex=bbf.asShortBuffer();
for(int i=0;i shortindex.position(0); int one=0x10000; int[] colors=new int[]{ one,0,0,0, one,0,0,0, one,0,0,0, 0,one,0,0, 0,one,0,0, 0,one,0,0, 0,0,one,0, 0,0,one,0, 0,0,one,0, one,0,0,0, one,0,0,0, one,0,0,0, 0,one,0,0, 0,one,0,0, 0,one,0,0, 0,0,one,0, }; ByteBuffer cbb=ByteBuffer.allocateDirect(colors.length*4); cbb.order(ByteOrder.nativeOrder()); myColorBuffer=cbb.asIntBuffer(); myColorBuffer.put(colors); myColorBuffer.position(0); } @Override public void onDrawFrame(GL10 gl) { // TODO Auto-generated method stub gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glMatrixMode(GL10.GL_MODELVIEW); GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0, 1f, 0); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // gl.glColor4f(1.0f, 0, 0, 0.5f); gl.glVertexPointer(3,GL10.GL_FLOAT, 0,floatpointer); gl.glEnableClientState(GL10.GL_COLOR_ARRAY); gl.glColorPointer(4, GL10.GL_FIXED, 0, myColorBuffer); angle=angle+1.0f; gl.glRotatef(angle, 0.0f,1.0f,0.0f); gl.glDrawElements(GL10.GL_TRIANGLES,coords1.length,GL10.GL_UNSIGNED_SHORT,shortindex); gl.glDisableClientState(GL10.GL_COLOR_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // TODO Auto-generated method stub gl.glViewport(0, 0, width, height); float ratio = (float) width / height; gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // TODO Auto-generated method stub gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,GL10.GL_FASTEST); gl.glClearColor(0, 0, 0,0); gl.glShadeModel(GL10.GL_SMOOTH); gl.glEnable(GL10.GL_DEPTH_TEST); } }
共分享92篇相关文档