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. java project打包生成jar包(通用)

    1. 在工程目录下新建一个build.xml文件,如下图所示,注意必须是在工程目录下,而不是在工程目录的src目录里. 2.编写ant脚本,内容如下,jar文件名称(com.anllin.rup.bo ...

  2. nginx 配置优化详解

    # nginx不同于apache服务器,当进行了大量优化设置后会魔术般的明显性能提升效果 # nginx在安装完成后,大部分参数就已经是最优化了,我们需要管理的东西并不多 #user nobody; ...

  3. Java8:纠结的默认方法

    [编程导论(Java)·4.3Java接口] 在[0.3.1 Java简单介绍]中,有这么一段话:"请注意:Java并不是作为教学语言设计的.世界各地的大学在讲授Java的过程中均遇到一些教 ...

  4. C#秘密武器之泛型

    一.简介: 很多初学者在刚开始接触泛型的时候会比较难理解泛型,在这里先把 “泛型”当作一个形容词,这样就方便理解了,因为很多东西都可以是泛型的!比如:“泛型的类”,“泛型的方法”,“泛型的接口”,“泛 ...

  5. 《Java程序猿面试笔试宝典》之Statickeyword有哪些作用

    statickeyword主要有两种作用:第一,仅仅想为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关.第二,希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下 ...

  6. JavaScript | 基础(变量/引用/转换/函数)

    ———————————————————————————————————————————— 变量 全局变量:在函数体外声明,全局可以使用 局部变量:通过关键字var来声明 变量类型 <script ...

  7. Kubernetes使用prometheus+grafana做一个简单的监控方案

    前言 本文介绍在k8s集群中使用node-exporter.prometheus.grafana对集群进行监控.其实现原理有点类似ELK.EFK组合.node-exporter组件负责收集节点上的me ...

  8. iOS 两种不同的图片无限轮播

    代码地址如下:http://www.demodashi.com/demo/11608.html 前记 其实想写这个关于无限轮播的记录已经很久很久了,只是没什么时间,这只是一个借口,正如:时间就像海绵, ...

  9. leetcode 43 Multiply Strings 大数相乘

    感觉是大数相乘算法里面最能够描述.模拟演算过程的思路 class Solution { public String multiply(String num1, String num2) { if(nu ...

  10. MySQL学习总结(四)数据的基本操作以及MySQL运算符和常用函数

    数据库是存储数据库对象的仓库,数据库的基本对象是表,表用来存储数据.关于数据的操作也就是我们常说的CRUD,C指的是CREATE(插入数据记录).R指的是READ(查询数据记录).U指的是UPDATE ...