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 //索引值資料 ); }}
|
沒有留言:
張貼留言