前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形。其它所有复杂的2D或3D图形都是由这些基本图形构成。

本例介绍如何使用三角形构造一个正20面体。一个正20面体,有12个顶点,20个面,30条边构成:

创建一个DrawIcosahedron Activity, 定义20面体的12个顶点,和20个面如下:

static final float X=.525731112119133606f;
static final float Z=.850650808352039932f;static float vertices[] = new float[]{-X, 0.0f, Z, X, 0.0f, Z, -X, 0.0f, -Z, X, 0.0f, -Z,0.0f, Z, X, 0.0f, Z, -X, 0.0f, -Z, X, 0.0f, -Z, -X,Z, X, 0.0f, -Z, X, 0.0f, Z, -X, 0.0f, -Z, -X, 0.0f};static short indices[] = new short[]{0,4,1, 0,9,4, 9,5,4, 4,5,8, 4,8,1,8,10,1, 8,3,10, 5,3,8, 5,2,3, 2,7,3,7,10,3, 7,6,10, 7,11,6, 11,0,6, 0,1,6,6,1,10, 9,0,11, 9,11,2, 9,2,5, 7,2,11 };

OpenGL ES缺省使用同一种颜色来绘制图形,为了能够更好的显示3D效果,我们为每个顶点随机定义一些颜色如下:

float[] colors = {0f, 0f, 0f, 1f,0f, 0f, 1f, 1f,0f, 1f, 0f, 1f,0f, 1f, 1f, 1f,1f, 0f, 0f, 1f,1f, 0f, 1f, 1f,1f, 1f, 0f, 1f,1f, 1f, 1f, 1f,1f, 0f, 0f, 1f,0f, 1f, 0f, 1f,0f, 0f, 1f, 1f,1f, 0f, 1f, 1f};

将顶点,面,颜色存放到Buffer中以提高性能:

private FloatBuffer vertexBuffer;private FloatBuffer colorBuffer;private ShortBuffer indexBuffer;ByteBuffer vbb
= ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);ByteBuffer cbb
= ByteBuffer.allocateDirect(colors.length * 4);
cbb.order(ByteOrder.nativeOrder());
colorBuffer = cbb.asFloatBuffer();
colorBuffer.put(colors);
colorBuffer.position(0);ByteBuffer ibb
= ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
indexBuffer = ibb.asShortBuffer();
indexBuffer.put(indices);
indexBuffer.position(0);

看一看DrawScene代码:

public void DrawScene(GL10 gl) {super.DrawScene(gl);gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);gl.glLoadIdentity();gl.glTranslatef(0, 0, -4);gl.glRotatef(angle, 0, 1, 0);gl.glFrontFace(GL10.GL_CCW);gl.glEnable(GL10.GL_CULL_FACE);gl.glCullFace(GL10.GL_BACK);gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);gl.glEnableClientState(GL10.GL_COLOR_ARRAY);gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,GL10.GL_UNSIGNED_SHORT, indexBuffer);gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);gl.glDisable(GL10.GL_CULL_FACE);angle++;}

用来绘制20面体使用了gl.glDrawElements:

public abstract void glDrawElements(int mode, int count, int type, Buffer indices) ,可以重新定义顶点的顺序,顶点的顺序由indices Buffer 指定。

本例会显示一个绕Y轴不断旋转的20面体,如何旋转模型将在后面的坐标系统和坐标变换中介绍.

Android OpenGL ES(十一):绘制一个20面体相关推荐

  1. Android OpenGL ES(十一)绘制一个20面体 .

    前面介绍了OpenGL ES所有能够绘制的基本图形,点,线段和三角形.其它所有复杂的2D或3D图形都是由这些基本图形构成. 本例介绍如何使用三角形构造一个正20面体.一个正20面体,有12个顶点,20 ...

  2. android opengl把经纬度点用红色点显示在3d地球上,android OpenGL ES 地球仪绘制——球体绘制及纹理映射——源码...

    [实例简介] 支持如下: (1)opengl es绘制三角形拼成球体 (2)图片作为纹理映射到整个球面上 (3)双点触控缩放球体 (4)拖动旋转球体 [实例截图] [核心代码] OpenGLESTut ...

  3. Android OpenGL ES 学习(十一) –渲染YUV视频以及视频抖音特效

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  4. Android OpenGL ES 开发教程(20):颜色Color

    OpenGL ES 支持的颜色格式为RGBA模式(红,绿,蓝,透明度).颜色的定义通常使用Hex格式0xFF00FF 或十进制格式(255,0,255), 在OpenGL 中却是使用0-1之间的浮点数 ...

  5. Android使用NDK OpenGL ES3.0绘制一个三角形

    Android使用NDK  OpenGL ES3.0绘制一个三角形 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/820 ...

  6. 使用Android OpenGL ES 2.0绘图之一:搭建一个OpenGL ES环境

    传送门☞Android兵器谱☞转载请注明☞http://blog.csdn.net/leverage_1229 传送门☞系统架构设计☞转载请注明☞http://blog.csdn.net/levera ...

  7. OpenGl文章 Android OpenGL ES 简明开发教程

    Android OpenGL ES 简明开发教程 分类:android学习笔记2011-12-14 15:04375人阅读评论(0)收藏举报 ApiDemos 的Graphics示例中含有OpenGL ...

  8. OpenGL ES之三——绘制纯色背景

    概述 这是一个系列的Android平台下OpenGl ES介绍,从最基本的使用最终到VR图的展示的实现,属于基础篇.(后面针对VR视频会再有几篇文章,属于进阶篇) OpenGL ES之一--概念扫盲 ...

  9. Android OpenGL ES 从入门到精通系统性学习教程

    1 为什么要写这个教程 目前这个 OpenGL ES 极简教程的更新暂时告一段落,在此之前,很荣幸获得了阮一峰老师的推荐. 因为在工作中频繁使用 OpenGL ES 做一些特效.滤镜之类的效果,加上平 ...

最新文章

  1. 连接惠普打印机(通过WIFI)
  2. kmeans设置中心_kmeans聚类与支持向量机(1)
  3. fasttext的基本使用 java 、python为例子
  4. Pyqt 中__init__(self,parent==None) parent理解
  5. dockerfile安装oracle,docker通过Dockerfile安装oracle-12c数据库
  6. android 6.0 短信权限,Android6.0权限适配
  7. SqlServer自增长字段归零
  8. [c++primer][05]表达式
  9. 屏幕录像专家 V6.0+注册机
  10. 视频二维码在线生成器怎么用?
  11. Angular最佳实践之$http-麻雀虽小 五脏俱全
  12. 视频到图片(每隔几帧保存一张图片)opencv实现
  13. TensorFlow: A System for Large-Scale Machine Learning翻译
  14. 第一章:第1章 CRM核心业务介绍--概述,crm架构,公司组织结构,软件开发的生命周期,crm项目的核心业务介绍。...
  15. 5G标准中文版核心网:5G的系统构架!
  16. 【软考】--软考总结
  17. PostgreSQL 11 1000亿 tpcb、1000W tpcc 性能测试 - on 阿里云ECS + ESSD (含quorum based 0丢失多副本配置与性能测试)...
  18. 2006-07-16蜡肉的吃法(不完全)
  19. 高等数学学习笔记——第五十讲——可降阶的高阶微分方程
  20. 网络搜索引擎的工作原理

热门文章

  1. 电脑软件能截图无法发送(钉钉截图无法发送,微信能截图但是发送带虚线obj的文件,看不了照片)
  2. AutoCAD2016简体中文破解版32位64位下载
  3. 【手机】手机代码查询命令大集合
  4. 2022年十三届蓝桥杯国赛将至,来看看去年蓝桥杯C++b组国赛题目如何
  5. ADE-Tran-Dynamic parameter
  6. 百亿题典之C++编程题面试题
  7. 斯坦福 机器学习-第四章学习理论
  8. 拼多多java后台笔试题目总结(20180830)
  9. 机器学习 EM算法理解
  10. win10误禁用任务计划程序导致任务栏里的输入法丢失