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. HTMLTestRunner美化

    https://www.cnblogs.com/findyou/p/6925733.html 参考这个,美化的不错,进入了汉化,及加入了一些样式,

  2. 电脑(台式机||笔记本)开机password忘记通用解决方法

    方法:直接制作一个老毛桃装机版u盘启动盘 网址:老毛桃官网 步骤:依照网址的解说,将制作好的U盘插入到电脑的usb插口.执行Windows 登入password破解菜单,搜索password所在的盘符 ...

  3. http://zhidao.baidu.com/link?url=inouJq69pK4PVM2L26fvnxXfRKhJ1uKmttgVqIEqld14SEUa8JzXZfRYHS3qdltqMXBgEQycFsF8AI9DlSoH4_

    http://zhidao.baidu.com/link?url=inouJq69pK4PVM2L26fvnxXfRKhJ1uKmttgVqIEqld14SEUa8JzXZfRYHS3qdltqMXB ...

  4. IE8兼容<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

    转自:http://nicyea.iteye.com/blog/719007 前言 X-UA-Compatible是针对ie8新加的一个设置,对于ie8之外的浏览器是不识别的,这个区别与 conten ...

  5. Sublime Theme

    Package Control Messages======================== Theme - Spacegray----------------- Thanks for insta ...

  6. hibernate学习系列-----(8)hibernate对集合属性的操作之Collectioon集合篇

    度过短暂的周末,又到了周一,继续轻松而愉快的学习,紧承以前的学习,继续了解hibernate对集合的操作学习之旅! 在上一篇中,就已经提前说过,这一篇的内容以及下一篇的内容会有很多相似之处,这里就不再 ...

  7. FileZilla_Server如何配置

    安装采用默认直接安装.   2.下图直接点OK   进入主界面,如下     3.配置账户 选择 Edit->USERS 开始创建账户 点击ADD 按钮添加账户user1 点OK 后,回到创建账 ...

  8. Odoo8在TreeView左上角增加自定义按钮以及通过继承生成自定义的View_Mode

    今天有网友在问怎么在TreeView左上角增加一个自定义的按钮,在查询Odoo 自带的模块,发现在purchase_requisition中有使用,并且此模块还应用到了自定义View_Mode的情况, ...

  9. ubuntu挂载3T新硬盘并更换home分区

    ubuntu添加一块新的硬盘,并更换home分区 1.将硬盘接入机箱,开机,查看是否现有的硬盘信息 从这里可以看出,共有两块硬盘,分别是sda和sdb 2.执行fdisk -l,确保我们要添加的就是s ...

  10. Android-LinearLayout布局技巧(一)

    先看2张图 一.5.1寸 二.3.7寸 三.代码 <?xml version="1.0" encoding="utf-8"?> <Linear ...