[文件] MyTextureRect.java ~ 4KB 下载(18) /**
*
*/
package ghost.android3d.opengl35;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBu http://www.fpzhangsha.com/linked/20130211.do; ffer;
import javax.microedition.khronos.opengles.GL10;
/**
* @author 玄雨
* @qq 821580467
* @date 2013-1-31
*/
public class MyTextureRect {
private IntBuffer mVertexBuffer;//极点坐标数据缓冲
private FloatBuffer mTextureBuffer;//极点上色数据缓冲
int vCount;
int texId;
public MyTextureRect(int texId)
{
this.texId=texId;
//极点坐标数据的初始化================begin============================
vCount=6;
final int UNIT_SIZE=70000;
int vertices[]=new int[]
{
-1*UNIT_SIZE,1*UNIT_SIZE,0,
-1*UNIT_SIZE,-1*UNIT_SIZE,0,
1*UNIT_SIZE,1*UNIT_SIZE,0,
-1*UNIT_SIZE,-1*UNIT_SIZE,0,
1*UNIT_SIZE,-1*UNIT_SIZE,0,
1*UNIT_SIZE,1*UNIT_SIZE,0
};
//创立极点坐标数据缓冲
//vertices.length*4是因为一个整数四个字节
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
vbb.order(ByteOrder.nativeOrder());//设置字节次序
mVertexBuffer = vbb.asIntBuffer();//变换为int型缓冲
mVertexBuffer.put(vertices);//向缓冲区中放入极点坐标数据
mVertexBuffer.position(0);//设置缓冲区开始方位
//格外提示:因为不一样渠道字节次序不一样数据单元不是字节的一定要经过ByteBuffer
//变换,关键是要经过ByteOrder设置nativeOrder(),不然有可能会出问题
//极点坐标数据的初始化================end============================
//极点纹路数据的初始化================begin============================
float textures[]=new float[]
{
0,0,0,1,1,0,
0,1,1,1,1,0
};
//创立极点纹路数据缓冲
ByteBuffer tbb = ByteBuffer.allocateDirect(textures.length*4);
tbb.order(ByteOrder.nativeOrder());//设置字节次序
mTextureBuffer= tbb.asFloatBuffer();//变换为Float型缓冲
mTextureBuffer.put(textures);//向缓冲区中放入极点上色数据
mTextureBuffer.position(0);//设置缓冲区开始方位
//格外提示:因为不一样渠道字节次序不一样数据单元不是字节的一定要经过ByteBuffer
//变换,关键是要经过ByteOrder设置nativeOrder(),不然有可能会出问题
//极点纹路数据的初始化================end============================
}
public void drawSelf(GL10 gl)
{
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//启用极点坐标数组
//为画笔指定极点坐标数据
gl.glVertexPointer
(
3, //每个极点的坐标数量为3 xyz
GL10.GL_FIXED, //极点坐标值的类型为 GL_FIXED
0, //接连极点坐标数据之间的距离
mVertexBuffer //极点坐标数据
);
//敞开纹路
gl.glEnable(GL10.GL_TEXTURE_2D);
//答应运用纹路ST坐标缓冲
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
//为画笔指定纹路ST坐标缓冲
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTextureBuffer);
//绑定当时纹路
gl.glBindTexture(GL10.GL_TEXTURE_2D, texId);
//制作图形
gl.glDrawArrays
(
GL10.GL_TRIANGLES, //以三角形方法填充
0,
vCount
);
//封闭纹路
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisable(GL10.GL_TEXTURE_2D);
}
} http://www.fpshijiazhuang.com/linked/20130211.do;