简略地月星系三维展现

[文件] 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.fpshamen.com/linked/20130208.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.fpshamen.com/linked/20130208.do; 
posted @ 2013-02-09 02:30  chinadiy197601  阅读(289)  评论(0编辑  收藏  举报