,###1.在你的应用程序中用OpenGl Es来开发,少不了两个抽象类,一个是GLSurfaceView,一个是GLSurfaceView.Renderer. GLSurfaceView是一个显示容器而GLSurfaceView.Renderer主要完成容器中的绘制工作。

2.在使用opengl es之前,需要在android manifest中的声明所用的版本,如OpenGl ES 3.0 API

<!-- Tell the system this app requires OpenGL ES 3.0. -->
<uses-feature android:glEsVersion="0x00030000" android:required="true" />

3.本示例像其它的方式一样用来画一个三角形。

基本方法:1.创建GLSurfaceView组件,并用activity来显示。2.实现GLSurfaceView.Renderer中的三个方法,如果对OpenGL ES的基础知识不了解,可以参考前一篇博文。3.调用GLSurfaceView组件的setRenderer()指定Renderder对象,该对象将完成GLSurfaceView的3D绘制,下面直接上源码,已经全上注释。

###Main.java

package com.dragon.opengles02;import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;public class Main extends AppCompatActivity {private GLSurfaceView mGLView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
//        define a GlSurfaceView 容器,用于显示OpenGL的图形mGLView = new GLSurfaceView(this);
//        创建GLSurfaceView绘制器MyRenderer myRenderer = new MyRenderer();mGLView.setRenderer(myRenderer);//只有在数据改变时才进行Render,这样来提高性能mGLView.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);setContentView(mGLView);}
}

MyRenderer.java

package com.dragon.opengles02;import android.opengl.GLSurfaceView;import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;/*** This file created by dragon on 2016/8/2 14:45,* belong to com.dragon.opengles02 .*/
public class MyRenderer implements GLSurfaceView.Renderer {float[] triangleData = new float[]{0.1f,0.6f,0.0f,//上顶点-0.3f,0.0f,0.0f,//左0.3f,0.1f,0.0f//右};float[] triangleColor = new float[]{1.0f,0,0,0,//上->red0,1.0f,0,0,//左->green0,0,1.0f,0//右->blue};//    定义缓冲数据FloatBuffer triangleDataBuffer;FloatBuffer triangleColorBuffer;public MyRenderer(){
//        将数组->FloatBuffertriangleDataBuffer = floatBufferUtil(triangleData);
//        颜色数据->IntBuffertriangleColorBuffer = floatBufferUtil(triangleColor);}@Overridepublic 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);}@Overridepublic 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);}@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, -1.2f);  // ①// 设置顶点的位置数据gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleDataBuffer);// 设置顶点的颜色数据gl.glColorPointer(4, GL10.GL_FIXED, 0, triangleColorBuffer);// 根据顶点数据绘制平面图形gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);// 绘制结束gl.glFinish();gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);}private FloatBuffer floatBufferUtil(float[] arr){FloatBuffer mBuffer;ByteBuffer qbb = ByteBuffer.allocateDirect(arr.length*4);qbb.order(ByteOrder.nativeOrder());mBuffer = qbb.asFloatBuffer();mBuffer.put(arr);mBuffer.position(0);return mBuffer;}
}

4.效果展示,最终的代码实现了模型的旋转,在github上可以发现:


如果你还有问题没解决,你可以加入我们一起交流,专注于AR的在移动端的实现

或是关注我们的技术公众号,提供技术干货的地方,你有干货可以联系本人代发。

如果你觉得写的不错,对你有用,请在下面点个 支持一下嘛,有问题可以在下面留言评论。


5.github源码传送门源码下载

android studio | openGL es 3.0增强现实(AR)开发 (4) 绘制简单的2D图形、显示、旋转相关推荐

  1. Android Studio OpenGL ES绘制三棱锥/四面体的多纹理贴图 每个面使用一张图片渲染

    本文参考了王刚的<疯狂Android讲义(第3版)>P554-P559 要求:利用OpenGL ES绘制一个三棱锥,并对每个面进行纹理贴图,每个面使用不同的图片进行渲染. 环境:Andro ...

  2. Android使用OpenGL ES 3.0实现随手指旋转3D立方体

    OpenGL ES在做普通应用方面3D使用的不多,但有时候实现一些有趣的功能也是蛮不错的.画立方体的的demo网上已经很多了,这次我们就实现一个随手指旋转的立方体,这个demo基本可以了解各个坐标系转 ...

  3. android平台下OpenGL ES 3.0从零开始

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  4. OpenGL ES 3.0 简介

    转载请以链接形式标明出处: 本文出自:103style的博客 OpenGL ES 3.0学习汇总 OpenGL ES 3.0 学习记录汇总 简介 OpenGL ES (OpenGL for Ember ...

  5. android三个骰子摇动动画,【Android】OpenGL ES实现3D抛骰子

    实现的效果: 抛骰子 加载模型 一.OpenGL简介 OpenGL(全写Open Graphics Library)是个定义了一个跨编程语言.跨平台的编程接口的规格,它用于三维图象(二维的亦可).Op ...

  6. OpenGL ES 3.0管线渲染流程

    OpenGL ES 3.0 实现了具有可编程着色功能的图形管线,由两个规范组成: OpenGL ES 3.0 API规范 OpenGL ES 着色语言3.0规范 下图概述了OpenGL ES 3.0 ...

  7. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  8. OpenGL ES 2.0 for Android教程(二):定义顶点和着色器

    OpenGL ES 2 第二章:定义顶点和着色器 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(三) OpenGL ...

  9. 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数

    1.                 打开Eclipse,File-->New-->Project--->Android-->AndroidApplication Projec ...

  10. cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0

    cocos2d-x 2.X for Android中需要使用OpenGL ES 2.0 到了2.X版本中,cocos2d-x for Android已经不再支持(或者说放弃支持)opengl es 1 ...

最新文章

  1. 新获融资1亿,聚焦全栈,云知声背后的AI下半场
  2. CVPR 2018 论文解读 | 基于GAN和CNN的图像盲去噪
  3. php如何读出xml的节点内容 两个例子
  4. Java加密与解密的艺术~思维导图
  5. java 压缩加密 github_关于Java:使用github中的AES-256-CBC加密
  6. defender 报备_去体育中心游泳碰上竞训怎么办?酒店承接会议业务需要报备吗?部门这样说...
  7. 显卡RTX 3090运行pytorch报错CUDA error: no kernel image is available for execution on the device
  8. 外媒:麦当劳、星巴克、必胜客开始在萨尔瓦多接受比特币支付
  9. python udp通信_Python网络编程(三)
  10. 二分查找和三分求单峰函数极值
  11. 卷积神经网络的现代雏形——LeNet
  12. multiset用法详解
  13. Linux命令总结归纳
  14. 【新书推荐】我想做一个能在你的葬礼上描述你一生的人(贾平凹著)
  15. 观影坪-纪录片之《穹顶之下》
  16. 五步打造APP节日主题设计:以Lofter新年图标设计为例
  17. SQLite源码编译教程
  18. 如何与新同事共同成长?
  19. allegro artwork设置和颜色设置的导入导出
  20. 第七篇、网络资源获取。

热门文章

  1. 20145240《Java程序设计》第二周学习总结
  2. 第一阶段冲刺阶段项目总结
  3. 《软件设计精要与模式》书评
  4. delphi memo 查找字符 下行插入_VBA实践+用编程代码为PDF文档插入书签
  5. JavaWeb的环境配置
  6. ai作文批改_有道词典上线AI作文批改功能,可自动批改雅思、四六级作文
  7. java读取图片画布大小_在html5中,为什么最好不要用css去修改画布的大小?
  8. java访问kudu,KUDU的java操作
  9. 马尔科夫决策过程(MDP) : BlackJack问题(MC-ES)
  10. 阿里云云计算 39在线实验--PolarDB MySQL