/** *  */package org.crazyit.opengl;import java.nio.FloatBuffer;import java.nio.IntBuffer;import javax.microedition.khronos.egl.EGLConfig;import javax.microedition.khronos.opengles.GL10;import android.opengl.GLSurfaceView.Renderer;/** * 本类主要是对ES的常用方法进行的注释,对于ES的入门,很重要. */public class MyRenderer implements Renderer{float[] triangleData = new float[] {0.1f, 0.6f , 0.0f , // 上顶点-0.3f, 0.0f , 0.0f , // 左顶点0.3f, 0.1f , 0.0f  // 右顶点};int[] triangleColor = new int[] {65535, 0, 0, 0, // 上顶点红色0, 65535, 0, 0, // 左顶点绿色0, 0, 65535, 0 // 右顶点蓝色};float[] rectData = new float[] {0.4f, 0.4f , 0.0f, // 右上顶点0.4f, -0.4f , 0.0f, // 右下顶点-0.4f, 0.4f , 0.0f, // 左上顶点-0.4f, -0.4f , 0.0f // 左下顶点};int[] rectColor = new int[] {0, 65535, 0, 0, // 右上顶点绿色0, 0, 65535, 0, // 右下顶点蓝色65535, 0, 0, 0, // 左上顶点红色65535, 65535, 0, 0 // 左下顶点黄色};// 依然是正方形的四个顶点,只是顺序交换了一下float[] rectData2 = new float[] {-0.4f, 0.4f , 0.0f, // 左上顶点0.4f, 0.4f , 0.0f, // 右上顶点0.4f, -0.4f , 0.0f, // 右下顶点-0.4f, -0.4f , 0.0f // 左下顶点};float[] pentacle = new float[]{0.4f , 0.4f , 0.0f,-0.2f , 0.3f , 0.0f,0.5f , 0.0f , 0f,-0.4f , 0.0f , 0f,-0.1f, -0.3f , 0f};FloatBuffer triangleDataBuffer;IntBuffer triangleColorBuffer;FloatBuffer rectDataBuffer;IntBuffer rectColorBuffer;FloatBuffer rectDataBuffer2;FloatBuffer pentacleBuffer;public MyRenderer(){// 将顶点位置数据数组包装成FloatBuffer;triangleDataBuffer = FloatBuffer.wrap(triangleData);rectDataBuffer = FloatBuffer.wrap(rectData);rectDataBuffer2 = FloatBuffer.wrap(rectData2);pentacleBuffer = FloatBuffer.wrap(pentacle);// 将顶点颜色数据数组包装成IntBuffer;triangleColorBuffer = IntBuffer.wrap(triangleColor);rectColorBuffer = IntBuffer.wrap(rectColor);}/** * 当GLSurfaceView被创建时回调该方法. *  * GL10 代表ES的“绘制画笔”,类似于2D中的Canvas组件. */@Overridepublic void onSurfaceCreated(GL10 gl, EGLConfig config){/** * 该方法用于禁用ES某个方面的特性. */// 关闭抗抖动,提高性能gl.glDisable(GL10.GL_DITHER);/** * 该方法用于对ES某方面进行修正. */// 设置系统对透视进行修正gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);/** * 该方法设置ES“清屏”所用的颜色,四个值分别设置红/绿/蓝/透明度值:0为最小值,1为最大值。 */gl.glClearColor(0, 0, 0, 0);/** * 该方法用于设置ES的阴影模式. */// 设置阴影平滑模式gl.glShadeModel(GL10.GL_SMOOTH);/** * 该方法用于启动ES某方面的特性. *  * 此处用于启动ES的深度测试,让ES负责跟踪每个物体在Z轴上的深度,这样就可以避免后面的物体遮挡前面的物体. */// 启用深度测试gl.glEnable(GL10.GL_DEPTH_TEST);/** * 该方法用于设置深度测试类型. */// 设置深度测试的类型gl.glDepthFunc(GL10.GL_LEQUAL);}/** * 当GLSurfaceView的大小改变时回调该方法. */@Overridepublic void onSurfaceChanged(GL10 gl, int width, int height){/** * 该方法用于设置3D视窗的位置和大小。其中前两个参数指定该视窗的位置;后两个参数指定该视窗的宽高. */// 设置3D视窗的大小及位置gl.glViewport(0, 0, width, height);/** * 该方法用于设置视图的矩阵模型。通常可以接受GL10.GL_PROJECTION和GL10.GL_MODELVIEW两个值. *  * GL10.GL_PROJECTION 指定将屏幕设为透视图(想要看到逼真的三维物体,这是必须的),这意味着越远的东西看起来越小; * GL10.GL_MODELVIEW 将当前矩阵模式设为模型视图矩阵,这意味着任何新的变化都会影响该矩阵中的所有物体。 */// 将当前矩阵模式设为投影矩阵gl.glMatrixMode(GL10.GL_PROJECTION);/** * 相当于reset()方法,用于初始化单位矩阵. */// 初始化单位矩阵gl.glLoadIdentity();// 计算透视视窗的宽度、高度比float ratio = (float) width / height;/** * 用于设置透视投影的空间大小。前两个参数用于设置x轴上的最小坐标值/最大坐标值;中间两个参数用于设置y轴上的最小 * 坐标值/最大坐标值;后两个参数用于设置z轴上所能绘制的场景的深度的最小值和最大值。 */// 调用此方法设置透视视窗的空间大小。gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);}/** * Renderer对象 调用该方法绘制GLSurfaceVie的当前帧. */// 绘制图形的方法@Overridepublic void onDrawFrame(GL10 gl){// 清除屏幕缓存和深度缓存gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);/** * 该方法启用顶点坐标数组. */// 启用顶点座标数据gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);/** * 该方法启用顶点颜色数组. */// 启用顶点颜色数据gl.glEnableClientState(GL10.GL_COLOR_ARRAY);// 设置当前矩阵堆栈为模型堆栈,gl.glMatrixMode(GL10.GL_MODELVIEW);// --------------------绘制第一个图形---------------------// 重置当前的模型视图矩阵gl.glLoadIdentity();/** * 该方法主要用于移动图形中心点的位置. */gl.glTranslatef(-0.32f, 0.35f, -1f);/** * 该方法设置顶点的位置数据。 * 这个方法中第四个参数用于指定顶点坐标的值,使用一维数组表示,若有N个点, * 则该数组包含3N个数值,每3个值指定一个顶点xyz坐标值。 * 第一个参数指定多少个元素指定一个顶点位置,该值通常为3. * 第二个参数指定顶点坐标值的类型,如果顶点坐标值为float类型,则指定为GL10.GL_FLOAT, * 如果顶点坐标值为整数,则指定为GL10.GL_FIXED. * 第三个参数通常未0. */// 设置顶点的位置数据gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleDataBuffer);/** * 该方法设置顶点的颜色数据。 * 这个方法中第四个参数用于指定顶点颜色的值,使用一维数组表示,若有N个点, * 则该数组包含4N个数值,每4个值指定一个顶点红绿蓝透明度的颜色值。 * 第一个参数指定多少个元素指定一个顶点位置,该值通常为4. * 第二个参数指定顶点坐标值的类型,如果顶点坐标值为float类型,则指定为GL10.GL_FLOAT, * 如果顶点坐标值为整数,则指定为GL10.GL_FIXED. * 第三个参数通常未0. */// 设置顶点的颜色数据gl.glColorPointer(4, GL10.GL_FIXED, 0, triangleColorBuffer);/** * 该方法绘制平面。该方法的第一个参数用于指定绘制图形类型, * 第二个参数指定从哪个顶点开始绘制, * 第三个参数指定总共绘制顶点的个数. *  * 使用该方法时,如果第一个参数指定为GL10.GL_TRIANGLES,就绘制简单的三角形; * 如果指定为GL10.GL_TRIANGLE_STRIP,系统将会沿着给出的顶点数据来绘制三角形. *  * 顶点的数据相同,但是次序不同,也会影响画图的效果.ES所有的图形都是由三角形构成的,因此, * 三角形的形成次序对于图形的显示有决定性的作用。一般是012决定第一个三角形,123决定第二个三角形. */// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);// --------------------绘制第二个图形---------------------// 重置当前的模型视图矩阵gl.glLoadIdentity();gl.glTranslatef(0.6f, 0.8f, -1.5f);// 设置顶点的位置数据gl.glVertexPointer(3, GL10.GL_FLOAT, 0, rectDataBuffer);// 设置顶点的颜色数据gl.glColorPointer(4, GL10.GL_FIXED, 0, rectColorBuffer);// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);// --------------------绘制第3个图形---------------------// 重置当前的模型视图矩阵gl.glLoadIdentity();gl.glTranslatef(-0.4f, -0.5f, -1.5f);// 设置顶点的位置数据(依然使用之前的顶点颜色)gl.glVertexPointer(3, GL10.GL_FLOAT, 0, rectDataBuffer2);// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);// --------------------绘制第4个图形---------------------// 重置当前的模型视图矩阵gl.glLoadIdentity();gl.glTranslatef(0.4f, -0.5f, -1.5f);/** * 该方法主要用于纯色填充,设置使用纯色填充时需要禁用顶点颜色数组。 */// 设置使用纯色填充gl.glColor4f(1.0f, 0.2f, 0.2f, 0.0f);// 禁用顶点颜色数组gl.glDisableClientState(GL10.GL_COLOR_ARRAY);// 设置顶点的位置数据gl.glVertexPointer(3, GL10.GL_FLOAT, 0, pentacleBuffer);// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 5);/** * 该方法用于绘制完成后,调用结束绘制. */// 绘制结束gl.glFinish();/** * 结束绘制时要停用顶点坐标数据,顶点颜色数据. */gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}}

更多相关文章

  1. android 沉浸式状态栏的三种方法
  2. JS判断终端类型的几种方法
  3. Android非UI线程访问UI线程的方法总结
  4. 查看基于Android 系统单个进程内存、CPU使用情况的几种方法
  5. android 调试方法
  6. 整理android环境离线安装搭建方法——支持android 2.3.3和androi
  7. Android电话拨号器实现方法

随机推荐

  1. NDK 在 Android(安卓)studio如何使用(Andr
  2. Android(安卓)Developers:拖动和缩放
  3. Android(安卓)Studio 3.3.2 正式版的安装
  4. Android(安卓)OkHttp4 RequestBody.creat
  5. 开发小技巧--google推荐的底部导航栏的使
  6. Android(安卓)实现多图分享到微信朋友圈
  7. Android中MPAndroidChart使用Demo
  8. Android客户端+mysql+springmvc服务器端
  9. Android(安卓)NDK:①开发环境的搭建(Wind
  10. Android学习整理之Activity篇