最近玩玩Android的openGL,做了点注释,有用看看,没有了无视
public class GL1 extends Activity { private GLSurfaceView mGLSurfaceView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGLSurfaceView = new GLSurfaceView(this); mGLSurfaceView.setRenderer(new One()); setContentView(mGLSurfaceView); } @Override protected void onResume() { super.onResume(); mGLSurfaceView.onResume(); } @Override protected void onPause() { super.onPause(); mGLSurfaceView.onPause(); } } /** * 渲染器 * * @author yaoyuan * */ class One implements Renderer { private Square square; public One() { square = new Square(); } /** * 初始化视图 */ public void onDrawFrame(GL10 gl) { /* * 清空缓冲区预设值 * * GL_COLOR_BUFFER_BIT 颜色缓冲区 * * GL_DEPTH_BUFFER_BIT 深度缓冲区 * * GL_STENCIL_BUFFER_BIT 模板缓冲区 */ gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); //乘一个翻译矩阵代替当前的矩阵 gl.glTranslatef(0.0f, 0.0f, -6.0f); //画图形 square.draw(gl); } /** * 视图改变时调用 */ public void onSurfaceChanged(GL10 gl, int width, int height) { if (height == 0) { height = 1; } gl.glViewport(0, 0, width, height); /** * 指定当前的矩阵模式 * * GL_MODELVIEW 模型视图 GL_PROJECTION 投影 GL_TEXTURE 纹理 */ gl.glMatrixMode(GL10.GL_PROJECTION); // 替换当前矩阵矩阵的身份 gl.glLoadIdentity(); // 设置一个透视投影矩阵 GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f, 100.0f); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); } /** * 视图创建时调用 */ public void onSurfaceCreated(GL10 gl, EGLConfig config) { /* * 设置阴影模式 1.GL_FLAT 扁平 2.GL_SMOOTH 平滑 */ gl.glShadeModel(GL10.GL_SMOOTH); // 指定颜色缓冲区值 gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // 指定深度缓冲区值 gl.glClearDepthf(1.0f); // 可用GL服务端功能 gl.glEnable(GL10.GL_DEPTH_TEST); /* * 深度缓存比较 * * GL_NEVER 不通过 * * GL_LESS 如果传入的深度值小于存储深度的值,通过 * * GL_EQUAL 如果传入的传递深度值等于存储的深度值,通过 * * GL_LEQUAL 如果传入的深度值小于或等于存储的深度值,通过 * * GL_GREATER 如果传入的深度值大于存储深度值更大,通过 * * GL_NOTEQUAL 如果传入的深度值不等于存储深度值,通过 * * GL_GEQUAL 如果传入的深度值大于或等于存储深度值,通过 * * GL_ALWAYS 始终通过 */ gl.glDepthFunc(GL10.GL_LEQUAL); // 指定特定于实现的提示 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); } } /** * 图形 * * @author yaoyuan * */ class Square { private FloatBuffer vertexBuffer; private float vertices[] = { -1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f }; public Square() { ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4); byteBuf.order(ByteOrder.nativeOrder()); vertexBuffer = byteBuf.asFloatBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); } public void draw(GL10 gl) { // 定义前、后面对(GL_CW顺时针、GL_CCW逆时针) gl.glFrontFace(GL10.GL_CW); // 定义一个定点坐标数组 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); /* * 启用客户端功能 * * GL_COLOR_ARRAY 当glDrawArrays、glDrawElements被调用时,颜色数组可以被读写 * * GL_NORMAL_ARRAY 当glDrawArrays、glDrawElements被调用时,普通数组可以被读写 * * GL_TEXTURE_COORD_ARRAY 当glDrawArrays、glDrawElements被调用时,紋理數組可以被读写 * * GL_VERTEX_ARRAY 当glDrawArrays、glDrawElements被调用时,矩阵数组可以被读写 */ gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 从数组数据中渲染图元 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3); // 禁用客户端功能 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } }