OpenGL ES andoid学习————2
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的更多相关文章
- OpenGL ES andoid学习————1
package com.xhm.getaccount; import javax.microedition.khronos.egl.EGLConfig; import javax.microediti ...
- Android OpenGL ES 开发
OpenGL(Open Graphics Library) 是开放图形库,是一个跨平台的图形 API.OpenGL ES(OpenGL for Embedded System)是专为移动端提供的一个子 ...
- [OpenGL ES 02]OpenGL ES渲染管线与着色器
[OpenGL ES 02]OpenGL ES渲染管线与着色器 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创 ...
- OpenGL ES学习笔记(三)——纹理
首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...
- OpenGL ES学习笔记(一)——基本用法、绘制流程与着色器编译
首先声明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. 在Android.iOS等移动平台上 ...
- 从零开始学习OpenGL ES之一 – 基本概念
我曾写过一些文章介绍iPhone OpenGL ES编程,但大部分针对的是已经至少懂得一些3D编程知识的人.作为起点,请下载我的OpenGL Xcode项目模板,而不要使用Apple提供的模板.你可以 ...
- OpenGL ES学习资料总结
从今年春节后开始学习OpenGL ES,发现网上资料很有限,而且良莠不齐,所以整理了一下我学习时用到的资料和一些心得. 1. OpenGL ES1.x参考资料 把NEHE的教程移植到了Android上 ...
- 基于Cocos2d-x学习OpenGL ES 2.0之多纹理
没想到原文出了那么多错别字,实在对不起观众了.介绍opengl es 2.0的不多.相信介绍基于Cocos2d-x学习OpenGL ES 2.0之多纹理的,我是独此一家吧.~~ 子龙山人出了一个系列: ...
- 基于Cocos2d-x学习OpenGL ES 2.0系列——纹理贴图(6)
在上一篇文章中,我们介绍了如何绘制一个立方体,里面涉及的知识点有VBO(Vertex Buffer Object).IBO(Index Buffer Object)和MVP(Modile-View-P ...
随机推荐
- IE漏洞调试之CVE-2013-3893
前言 Windows平台的漏洞挖掘和安全研究中,IE始终是绕不开的话题.IE漏洞就跟adobe系列一样经典,是学习exploit.shellcode的绝佳途径. 在IE漏洞中,UAF即Use-Afte ...
- 纯C实现面向对象之接口编程
创建如下文件目录 : Shape.h #include <stdlib.h> //接口 #ifndef Interface #define Interface struct #endif ...
- [GitHub开源]基于HTML5实现的轻量级Google Earth三维地图引擎,带你畅游世界 【转】
http://blog.csdn.net/iispring/article/details/52679185 WebGlobe HTML5基于原生WebGL实现的轻量级Google Earth三维地图 ...
- solr6.6 配置拼音分词
参考:solr6.6 配置同义词 1.下载拼音分析包 下载地址:pinyin.zip 解压后放在core下面的lib文件夹下面: 2.修改managed-schema配置文件 <fieldTyp ...
- Kubernetes用户指南(二)--部署组合型的应用、连接应用到网络中
一.部署组合型的应用 1.使用配置文件启动replicas集合 k8s通过Replication Controller来创建和管理各个不同的重复容器集合(实际上是重复的pods). Replicati ...
- 如何让Firefox清除它记下的网站登录名和密码
- C#和Java中字符串的异同
字符串 在底层上跟C#类似,每个字符串的实例都不可修改.当修改字符串变量时,是将变量指向新的字符串实例,而不是修改原本的实例.Java中也有字符串池机制. 注意:使用 == 运算符比较字符串时,跟C# ...
- Linux 后台开发常用命令
1.automake编译 autoreconf -isv ./configure make 2.远程获取代码 rsync -aPvr --exclude=*/log/* *.*.*.*::home/s ...
- JAVA IO:Scanner类
使用Scanner类接收输入数据. JAVA提供了专门的输入数据类,此类可以完成BufferedReader类的功能,也可以方便的对输入数据进行验证,此类存放于JAVA.UTILL包中. 常用方法如下 ...
- Python中json.loads解析包含\n的字符串会出错
用python中的json.loads解析字符串,失败了. [解决过程] 1.调试了半天,终于发现,如果把其中的: "呵呵加那么多连接啊\n\n这个标准还是不错的\n\n给大家推荐一个更多的 ...
