package wyf.swq;import java.nio.ByteBuffer;					//引入相關套件
 import java.nio.ByteOrder;					//引入相關套件
 import java.nio.IntBuffer;					//引入相關套件
 import javax.microedition.khronos.opengles.GL10;
 public class Hexagon {
 private IntBuffer   mVertexBuffer;		//頂點座標資料緩衝
 private IntBuffer   mColorBuffer;		//頂點著色資料緩衝
 private ByteBuffer  mIndexBuffer;		//頂點建構索引資料緩衝
 int vCount=0;							//圖形頂點數量
 int iCount=0;							//索引頂點數量
 public Hexagon(int zOffset){
 //頂點座標資料的初始化
 vCount=7;
 final int UNIT_SIZE=10000;
 int vertices[]=new int[]{
 0*UNIT_SIZE,0*UNIT_SIZE,zOffset*UNIT_SIZE,
 2*UNIT_SIZE,3*UNIT_SIZE,zOffset*UNIT_SIZE,
 4*UNIT_SIZE,0*UNIT_SIZE,zOffset*UNIT_SIZE,
 2*UNIT_SIZE,-3*UNIT_SIZE,zOffset*UNIT_SIZE,
 -2*UNIT_SIZE,-3*UNIT_SIZE,zOffset*UNIT_SIZE,
 -4*UNIT_SIZE,0*UNIT_SIZE,zOffset*UNIT_SIZE,
 -2*UNIT_SIZE,3*UNIT_SIZE,zOffset*UNIT_SIZE
 };
 //建立頂點座標資料緩衝
 ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
 vbb.order(ByteOrder.nativeOrder());//設置位元組順序
 mVertexBuffer = vbb.asIntBuffer();//轉換為int型緩衝
 mVertexBuffer.put(vertices);//向緩衝區中放入頂點座標資料
 mVertexBuffer.position(0);//設置緩衝區起始位置
 //頂點著色數據的初始化
 final int one = 65535;
 int colors[]=new int[]//頂點顏色值陣列,每個頂點4個色彩值RGBA
 {
 0,0,one,0,
 0,one,0,0,
 0,one,one,0,
 
 one,0,0,0,
 one,0,one,0,
 one,one,0,0,
 one,one,one,0
 };
 //建立頂點著色資料緩衝
 ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4);
 cbb.order(ByteOrder.nativeOrder());//設置位元組順序
 mColorBuffer = cbb.asIntBuffer();//轉換為int型緩衝
 mColorBuffer.put(colors);//向緩衝區中放入頂點著色數據
 mColorBuffer.position(0);//設置緩衝區起始位置
 //三角形建構索引資料初始化
 iCount=18;
 byte indices[]=new byte[]{
 0,2,1,
 0,3,2,
 0,4,3,
 0,5,4,
 0,6,5,
 0,1,6
 };
 //建立三角形構造索引資料緩衝
 mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
 mIndexBuffer.put(indices);//向緩衝區中放入三角形建構索引資料
 mIndexBuffer.position(0);//設置緩衝區起始位置
 }
 public void drawSelf(GL10 gl){
 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//啟用頂點座標陣列
 gl.glEnableClientState(GL10.GL_COLOR_ARRAY);//啟用頂點顏色陣列
 gl.glVertexPointer(//為畫筆指定頂點座標資料
 3,				//每個頂點的座標數量為3  xyz
 GL10.GL_FIXED,	//頂點座標值的類型為 GL_FIXED
 0, 				//連續頂點座標資料之間的間隔
 mVertexBuffer	//頂點座標資料
 );
 gl.glColorPointer(//為畫筆指定頂點著色數據
 4, 				//設置顏色的組成成分,必須為4—RGBA
 GL10.GL_FIXED, 	//頂點顏色值的類型為 GL_FIXED
 0, 				//連續頂點著色資料之間的間隔
 mColorBuffer	//頂點著色數據
 );
 gl.glDrawElements(//索引法繪製圖形
 GL10.GL_TRIANGLES, 		//以三角形方式填充
 iCount, 			 	//一共icount/3個三角形,iCount個頂點
 GL10.GL_UNSIGNED_BYTE, 	//索引值的尺寸
 mIndexBuffer			//索引值資料
 );
 }}
 
 | 
沒有留言:
張貼留言