Android-GLSurfaceView简单使用
来源:互联网 发布:js监听手机端软键盘 编辑:程序博客网 时间:2024/06/02 03:07
使用步骤:
第一步:
在布局中,摆布好GLSurfaceView的位置.如下:
<android.opengl.GLSurfaceView android:id="@+id/glv_main" android:layout_width="match_parent" android:layout_height="200dp" />
第二步:
在Activity中实例化,如下:
@Override protected void onCreate(Bundle savedInstanceState){ GLSurfaceView glv = (GLSurfaceView)findViewById(R.id.glv_main);}
第三步:
获取足够的视图数据,然后新建数据提供者GLSurfaceView.Render, 创建GLRender类实现GLSurfaceView.Render接口,并且实现以下方法:
/** * Created by cm on 16/9/1. */public class GLRender implements GLSurfaceView.Renderer{ //控制旋转的角度 private float rotate; @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { //关闭抗抖动 gl.glDisable(GL10.GL_DITHER); //设置系统对透视进行修正 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); //设置深度测试的类型 gl.glDepthFunc(GL10.GL_LEQUAL); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { //设置3D视窗的大小及位置 gl.glViewport(0, 0, width, height); //将当前矩阵模式设为投影矩形 gl.glMatrixMode(GL10.GL_PROJECTION); //初始化单位矩阵 gl.glLoadIdentity(); //计算透视窗口的宽度高度比 float ratio = (float) width / height; //调用此方法设置透视窗口的空间大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); } @Override public 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.95f, -0.8f, -1.5f); //1️⃣ //设置顶点位置数据 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(PointData.triangleData)); //设置顶点颜色数据 gl.glColorPointer(4, GL10.GL_FIXED, 0, PointData.intBufferUtil(PointData.triangleColor)); //根据顶点数据绘制平面图形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); //-----绘制第二个图形----- //重置当前的模型视图矩阵 gl.glLoadIdentity(); gl.glTranslatef(0.95f, 0.8f, -1.5f); //设置顶点位置数据 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(PointData.rectData)); //设置顶点颜色数据 gl.glColorPointer(4, GL10.GL_FIXED, 0, PointData.intBufferUtil(PointData.rectColor)); //更具顶点数据绘制平面图形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //-----绘制第三个图形---- //重置当前的模型视图矩阵 gl.glLoadIdentity(); gl.glTranslatef(-0.95f, 0.8f, -1.5f); //设置顶点位置数据 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(PointData.rectData2)); //根据顶点数据绘制平面图形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //-----绘制第四个图形----- //重置当前的模型视图矩阵 gl.glLoadIdentity(); gl.glTranslatef(-0.95f, -0.8f, -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, PointData.floatBufferUtil(PointData.pentacle)); //根据顶点数据绘制图形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 5); //----绘制第五个图形--- //重置当前的模型视图矩阵 gl.glLoadIdentity(); gl.glTranslatef(0f, 0f, -1.5f); gl.glRotatef(rotate, 0f, 0.2f, 0f); //设置顶点位置数据 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, PointData.floatBufferUtil(TDPointData.taperVertices)); //启用顶点颜色组 gl.glEnableClientState(GL10.GL_COLOR_ARRAY); //设置顶点颜色数据 gl.glColorPointer(4, GL10.GL_FIXED, 0, PointData.intBufferUtil(TDPointData.taperColors)); //按taperFacetsBuffer指定的面绘制三角形 ByteBuffer byteBuffer = PointData.byteBufferUtil(TDPointData.taperFacets); gl.glDrawElements(GL10.GL_TRIANGLE_STRIP, byteBuffer.remaining(), GL10.GL_UNSIGNED_BYTE, byteBuffer); //绘制结束 gl.glFinish(); gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); //旋转角度+1 rotate += 1; }}
第四步:
将提供者与GLSurfaceView对接如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_glsurface); glv = (GLSurfaceView)findViewById(R.id.glv_opengl); GLRender render = new GLRender(); glv.setRenderer(render); }
0 0
- Android-GLSurfaceView简单使用
- Android GLSurfaceView
- Android GLSurfaceView
- Android GLSurfaceView
- 基于Android的OpenGL—使用GLSurfaceView
- Android OpenGL使用GLSurfaceView预览视频
- 基于Android的OpenGL—使用GLSurfaceView创建一个Activity
- Android View和GLSurfaceView使用OpenGL绘制对比
- android.opengl.GLSurfaceView
- android.opengl.GLSurfaceView概述
- android.opengl.GLSurfaceView概述
- android.opengl.GLSurfaceView 概述
- android.opengl.GLSurfaceView
- Android GLSurfaceView.Renderer
- Android OpenGL ES->GLSurfaceView
- Android 介绍GLSurfaceView
- android GLSurfaceView 异常处理
- Android GLSurfaceView 背景透明
- 《机器学习实战》学习(一)——k-近邻算法(kNN)
- (非常重要)C++中复制构造函数与重载赋值操作符总结
- DragonBoard410C开发板HDMI简介
- 负载均衡-如何处理并发性带来的问题
- 后台启动springboot jar
- Android-GLSurfaceView简单使用
- js对象
- WebService学习总结(一)——WebService的相关概念
- iOS调用系统音频
- group by 后使用 rollup 子句总结
- Android通过打开浏览器下载apk
- C++ 和C#中 数字前有0的不同处理
- 欢迎使用CSDN-markdown编辑器
- 短 URL 系统是怎么设计的?