Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)
来源:互联网 发布:borderlands 2 mac 编辑:程序博客网 时间:2024/06/06 02:29
Android上对OpenGl的支持是无缝的,所以才有众多3D效果如此逼真的游戏,在Camera的一些流程中也有用到GLSurfaceView的情况。本文记录OpenGL在Android上的入门级示例,绘制一个三角形和正方形。尽管功能简单,可是我捣腾了好几个晚上,大量网上文章上的代码都有点问题,不是绘制不出来就是挂了。
第一个文件:MainActivity.Java
第二个文件:BufferUtil.java 负责将数组转成buffer
第三个文件:OpenGLRender.java 这是最为核心的,负责给配套的GLSurfaceView绘制东西
开发要点:
1、GLSurfaceView可以直接new,也可以放到布局里,本例用的是第一种方法。
2、一个GLSurfaceView要配套一个Renderer,这个Renderer是一个接口,里面有三个函数。这点跟Surfaceview很像。尤其是其中的onDrawFrame()可以类比为Android里View的onDraw()函数。
3、绘制的主题在onDrawFrame()函数里,使用以下代码绘制三角形:
//绘制小三角形
gl.glLoadIdentity();
gl.glTranslatef(-1.5f, 0.0f, -6.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mTriangleBuffer);//数组指向三角形顶点buffer
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
// gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
gl.glFinish();
需要注意的是,在一些教程上写着绘制完后要gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 清除所设的顶点,这是个错误!一旦调用此句,则什么画不出来了!!!
然后再绘制正方形:
//绘制正方形
gl.glLoadIdentity();
gl.glTranslatef(1.5f, 0.0f, -6.0f);
// gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, quateBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
gl.glFinish();
注意绘制三角形之前已经加载了Color:gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);
如果在绘制完后调用gl.glDisableClientState(GL10.GL_COLOR_ARRAY);的话可以看到三角形一闪而过,正方形都看不到了。这块也是个误解!如果后面通过gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);再次指定颜色,可以看到会以此颜色绘制三角形和正方形。 总而言之,这个onDrawFrame()和View的onDraw()很像,在onDraw里不给paint设颜色,就画。或者画完后,又给颜色设成透明了,结果肯定也是啥都看不到。不明白为啥这么多教程上在绘制完小三角形后非要带:
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
这两句bug!!!
关于代码本身涉及的流程就不解释了,参考链接里说的很清楚。
4、如果正方形四个顶点坐标顺序更换后,画出来的将不是正方形。
源码链接:http://download.csdn.net/detail/yanzi1225627/7484793
参考: 链接1 链接2
效果图如下所示:
- Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)
- Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)
- OpenGL程序:绘制正方形和三角形
- qt opengl lesson2 绘制一个三角形和一个正方形
- Android openGL ES 2.0入门--画三角形、正方形
- android opengl es 三角形、正方形自动旋转
- openGL ES Android 三角形绘制
- OpenGL 环绕和绘制三角形
- OpenGL入门(三):绘制一个三角形
- android opengl es基本操作,画线,三角形,正方形,颜色设置
- qt opengl lesson3 给三角形和正方形上色
- 【附源码】【Android 3D OpenGL】开发之二——旋转的三角形【MacroCheng原创】
- android opengl es绘制三角形+纹理
- Android OpenGL ES 基础:绘制三角形
- Android OpenGL ES 2.0绘制简单三角形
- OpenGL ES2.0入门之Android篇(一)——绘制三角形
- 【菜鸟也能玩转OpenGL】OpenGL绘制正方形
- 使用opengl绘制三角形
- 集成实现ViewPager的无限轮播和圆点变动
- Java垃圾收集算法与垃圾收集器
- MySql事务机制
- 【数据结构】-(三)
- 【逻辑思考】真正改变命运的其实并不是知识,而是这些知识带给你的能力的提高。也就是说,转化为能力的知识,才能够改变你的命运。
- Android OpenGL入门示例:绘制三角形和正方形 (附完整源码)
- js延迟加载的方式有哪些?
- ubuntu 查看内存最大容量
- ThinkPHP 公共函数整理
- 栈操作的问题
- 《Reverse Engineering for Beginners》 - 第1章 代码模式 - 笔记(1.13)
- Android 自定义Dialog背景透明及显示位置设置
- 【Java每日一题】20161219
- Java 冒泡排序、选择排序、快速排序、归并排序