OpenGL ES andoid学习————2
来源:互联网 发布:java生成app 编辑:程序博客网 时间:2024/05/17 22:49
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; }}
0 0
- OpenGL ES andoid学习————2
- OpenGL ES andoid学习————1
- OpenGL ES 学习笔记(二)——什么是OpenGL ES
- OpenGL ES(1)——构建OpenGL ES环境
- OpenGL ES(2)——定义图形
- OpenGL ES——简述
- OpenGL ES学习之三——贴图
- 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之Shader准备(7)
- 基于Cocos2d-x学习OpenGL ES 2.0系列——OpenGL ES渲染之LayerColor(8)
- 基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)
- OpenGL ES(3)——绘制图形
- OpenGL ES(5)——添加动作
- OpenGL ES随手记——视图
- API Guides——OpenGL ES
- 学习OpenGL-ES: 2
- 学习OpenGL-ES: 2
- android graphic(2)—EGL和OpenGL ES
- android graphic(2)—EGL和OpenGL ES
- React Native和原生iOS Objective-C的交互解决方案
- Gallery学习————检测手机中是否存在外部存储设备
- C/C++中函数传参方式简述
- OpenGL ES andoid学习————1
- InfoSphere CDC 实时同步本地数据到云端的BigInsights
- OpenGL ES andoid学习————2
- jzoj 1360. 【2011.12.31普及模拟】逃离洞穴
- Wijmo 2016 V2 强势发布!
- android中文字斜着显示
- android中TabHost和RadioGroup
- 获得String形式日期的后一天
- SlidingMenu——使用前的配置
- SlidingMenu官方实例分析1——ExampleListActivity
- 设置PopupMenu创建弹出式菜单