package com.xhm.getaccount; import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer; import javax.microedition.khronos.opengles.GL10; /**
* 主要实现渲染时的效果
*
* @author Administrator
*
*/
public class MyMesh {
// 顶点的个数
private short mUnmIndexSize;
// 顶点数组缓冲
private FloatBuffer mVertexBuffer;
// 顶点顺序数组缓冲
private ShortBuffer mIndexBuffer;
// 设置画笔的颜色
private float[] rgba = new float[] { 0.0f, 0.0f, 0.0f, 1.0f }; /**
* 画笔设置
*
* @param gl
* 画笔
*/
public void draw(GL10 gl) {
/**
* 设置顶点的连接顺序
*
* glFrontFace(GL_CCW)设置CCW方向为“正面”,CCW即CounterClockWise,逆时针
*
* glFrontFace(GL_CW)设置CW方向为“正面”,CW即ClockWise,顺时针
*/
gl.glFrontFace(GL10.GL_CCW);
/**
* 开启剔除效果
*/
gl.glEnable(GL10.GL_CULL_FACE);
/**
* glCullFace()参数包括GL_FRONT和GL_BACK.
*
* 表示禁用多边形正面或者背面上的光照、阴影和颜色计算及操作,
*
* 消除不必要的渲染计算。
*/
gl.glCullFace(GL10.GL_BACK);
/**
* 开启某种状态,类似管道流,用完之后需要关闭。
*
* GL_VERTEX_ARRAY准备接受顶点数组
*/
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
/**
* 参数:
*
* size:指定了每个顶点对应的坐标个数,只能是2,3,4中的一个,默认值是4
* type:指定了数组中每个顶点坐标的数据类型,可取常量:GL_BYTE, GL_SHORT,GL_FIXED,GL_FLOAT;
* stride:指定了连续顶点间的字节排列方式,如果为0,数组中的顶点就会被认为是按照紧凑方式排列的,默认值为0
* pointer:制订了数组中第一个顶点的首地址
* ,默认值为0,对于我们的android,大家可以不用去管什么地址的,一般给一个IntBuffer就可以了。
*/
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
/**
* 设置画笔的颜色
*/
gl.glColor4f(rgba[0], rgba[1], rgba[2], rgba[3]);
/**
* mode指定 绘制图元的类型,它应该是下列值之一:
*
* GL_POINTS:独立的点。
*
* GL_LINE_STRIP:将所有点连接起来组成一条线。
*
* GL_LINE_LOOP:将所有点连接起来组成一个圈。
*
* GL_LINES:两个相连组成线段。
*
* GL_TRIANGLE_STRIP:每相邻三个顶点组成一个三角形,为一系列相接三角形构成。
*
* GL_TRIANGLE_FAN:以一个点为三角形公共顶点,组成一系列相邻的三角形。
*
* GL_TRIANGLES:每隔三个顶点构成一个三角形,为多个三角形组成。
*
* GL_QUAD_STRIP:
*
* GL_QUADS:
*
* GL_POLYGON:
*
* count为绘制图元的数量。
*
* type为索引值的类型,只能是下列值之一: GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or
* GL_UNSIGNED_INT。
*
* indices:指向索引存贮位置的指针
*/
gl.glDrawElements(GL10.GL_TRIANGLES, mUnmIndexSize,
GL10.GL_UNSIGNED_SHORT, mIndexBuffer);
// 关闭开启的所有通道
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
} /**
* 添加顶点数组
*
* @param vertices
* 顶点坐标3个一组
*/
public void setVertices(float[] vertices) {
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
mVertexBuffer = vbb.asFloatBuffer();
mVertexBuffer.put(vertices);
mVertexBuffer.position(0);
} /**
* 添加顶点顺序数组
*
* @param indices
* 顺序三个一组,组成三角形
*/
public void setIndices(short[] indices) {
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
mIndexBuffer = ibb.asShortBuffer();
mIndexBuffer.put(indices);
mIndexBuffer.position(0);
mUnmIndexSize = (short) indices.length;
} /**
* 设置画笔的颜色
*
* @param r
* @param g
* @param b
* @param a
*/
public void setColor(float r, float g, float b, float a) {
rgba[0] = r;
rgba[1] = g;
rgba[2] = b;
rgba[3] = a;
}
}

OpenGL ES andoid学习————2的更多相关文章

  1. OpenGL ES andoid学习————1

    package com.xhm.getaccount; import javax.microedition.khronos.egl.EGLConfig; import javax.microediti ...

  2. Android OpenGL ES 开发

    OpenGL(Open Graphics Library) 是开放图形库,是一个跨平台的图形 API.OpenGL ES(OpenGL for Embedded System)是专为移动端提供的一个子 ...

  3. [OpenGL ES 02]OpenGL ES渲染管线与着色器

    [OpenGL ES 02]OpenGL ES渲染管线与着色器 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创 ...

  4. OpenGL ES学习笔记(三)——纹理

    首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...

  5. OpenGL ES学习笔记(一)——基本用法、绘制流程与着色器编译

    首先声明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. 在Android.iOS等移动平台上 ...

  6. 从零开始学习OpenGL ES之一 – 基本概念

    我曾写过一些文章介绍iPhone OpenGL ES编程,但大部分针对的是已经至少懂得一些3D编程知识的人.作为起点,请下载我的OpenGL Xcode项目模板,而不要使用Apple提供的模板.你可以 ...

  7. OpenGL ES学习资料总结

    从今年春节后开始学习OpenGL ES,发现网上资料很有限,而且良莠不齐,所以整理了一下我学习时用到的资料和一些心得. 1. OpenGL ES1.x参考资料 把NEHE的教程移植到了Android上 ...

  8. 基于Cocos2d-x学习OpenGL ES 2.0之多纹理

    没想到原文出了那么多错别字,实在对不起观众了.介绍opengl es 2.0的不多.相信介绍基于Cocos2d-x学习OpenGL ES 2.0之多纹理的,我是独此一家吧.~~ 子龙山人出了一个系列: ...

  9. 基于Cocos2d-x学习OpenGL ES 2.0系列——纹理贴图(6)

    在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...

随机推荐

  1. js判断上传文件的大小、类型、修改日期等信息

    1.找到上传文件的前端代码,下断点,进行调试,使用jquery获得上传文件对象 2.鼠标放到文件对象fielEl上,弹出文件对象具体内容,可以看大文件对象的:上次修改时间.名字.大小.类型等信息 3. ...

  2. Druid和Spark对比

    Druid和Spark对比 不是Spark专家, 如果描绘有错误, 请通过邮件列表或者其他方式告知我们 Spark实现弹性的分布式数据集概念的计算集群系统, 可以看做商业分析平台. RDDs能复用持久 ...

  3. [转载]centos 6.4中git如何正常显示中文

    FROM: http://ju.outofmemory.cn/entry/63250 系统版本:centos 6.4 git版本:1.7.1,使用yum直接安装的. 当使用git status查看时, ...

  4. [转载] 在Linux中,开机自动运行普通用户的脚本程序

    FROM:http://blog.csdn.net/sinboy/article/details/2466225 FROM:http://www.2cto.com/os/201006/50680.ht ...

  5. Solr报错Index locked for write for core '***'. Solr now longer supports forceful unlocking via 'unlockOnStartup'

    unlockOnStartup 告知 Solr 忽略在多线程环境中用来保护索引的锁定机制.在某些情况下,索引可能会由于不正确的关机或其他错误而一直处于锁定,这就妨碍了添加和更新.将其设置为 true ...

  6. CMA连续物理内存用户空间映射---(二)

    摘要: 相对于上一篇測试程序CMA连续物理内存用户空间映射---(一) 添加功能: 1.分配和映射统一放在IOCTL,一次完毕,能够连续多次分配并映射到用户空间,提高操作性: 2.驱动添加链表,使分配 ...

  7. MPTCP 源码分析(四) 发送和接收数据

    简述:      MPTCP在发送数据方面和TCP的区别是可以从多条路径中选择一条 路径来发送数据.MPTCP在接收数据方面与TCP的区别是子路径对无序包 进行重排后,MPTCP的mpcb需要多所有子 ...

  8. centos 6.5 python2.6.6 zbar 安装

       经过数次折腾,终于搞明白了这个zbar的安装顺序.   1.先安装http://zbar.sourceforge.net/download.html 下的zbar,   2.python 安装z ...

  9. B1:模板方法模式 TemplateMethod

    定义一个操作中的算法骨架,而将一些步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤 应用场景: A.操作步骤稳定,而具体细节延迟到子类. UML: 示例代码: ...

  10. HTML 5 中WebStorage实现数据本地存储

    webstorage 分sessionStorage和localstorage,sessionStorage是暂时保存,localStorage是永久保存. sessionStorage假设浏览器关闭 ...