package wyf.swq; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.IntBuffer; import javax.microedition.khronos.opengles.GL10; public class Triangle { private IntBuffer myVertexBuffer;//頂點座標資料緩衝 private IntBuffer myColorBuffer;//頂點著色資料緩衝 private ByteBuffer myIndexBuffer;//頂點建立的索引資料緩衝 int vCount=0;//頂點數量 int iCount=0;//索引數量 float yAngle=0;//繞y軸旋轉的角度 float zAngle=0;//繞z軸旋轉的角度 public Triangle(){ vCount=3;//一個三角形,3個頂點 final int UNIT_SIZE=10000;//縮放比例 int []vertices=new int[] { -8*UNIT_SIZE,6*UNIT_SIZE,0, -8*UNIT_SIZE,-6*UNIT_SIZE,0, 8*UNIT_SIZE,-6*UNIT_SIZE,0 }; //建立頂點座標資料緩存,由於不同平臺位元組順序不同,資料單元不是位元組的(上面的事整型的緩存),一定要經過ByteBuffer轉換,關鍵是通過ByteOrder設置nativeOrder() ByteBuffer vbb=ByteBuffer.allocateDirect(vertices.length*4);//一個整數四個位元組,根據最新分配的區塊來建立一個有向的位元組緩衝 vbb.order(ByteOrder.nativeOrder());//設置這個位元組緩衝的位元組順序為本地平臺的位元組順序 myVertexBuffer=vbb.asIntBuffer();//轉換為int型緩衝 myVertexBuffer.put(vertices);//向緩衝區中放入頂點座標資料 myVertexBuffer.position(0);//設置緩衝區的起始位置 final int one=65535;//支持65535色色彩通道 int []colors=new int[]//頂點顏色值陣列,每個頂點4個色彩值RGBA { one,one,one,0, one,one,one,0, one,one,one,0 }; ByteBuffer cbb=ByteBuffer.allocateDirect(colors.length*4); cbb.order(ByteOrder.nativeOrder()); myColorBuffer=cbb.asIntBuffer(); myColorBuffer.put(colors); myColorBuffer.position(0); //為三角形建構索引資料初始化 iCount=3; byte []indices=new byte[] { 0,1,2 }; //建立三角形構造索引資料緩衝 myIndexBuffer=ByteBuffer.allocateDirect(indices.length); myIndexBuffer.put(indices); myIndexBuffer.position(0); } public void drawSelf(GL10 gl)//GL10是實作介面GL的一公共介面,包含了一系列常數和抽象方法 { gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);//啟用頂點座標陣列 gl.glEnableClientState(GL10.GL_COLOR_ARRAY);//啟用頂點顏色陣列 gl.glRotatef(yAngle,0,1,0);//根據yAngle的角度值,繞y軸旋轉yAngle gl.glRotatef(zAngle,0,0,1); gl.glVertexPointer//為畫筆指定頂點座標資料 ( 3, //每個頂點的座標數量為3 GL10.GL_FIXED, //頂點座標值的類型為GL_FIXED,整型 0, //連續頂點座標資料之間的間隔 myVertexBuffer //頂點座標數量 ); gl.glColorPointer//為畫筆指定頂點 顏色資料 ( 4, GL10.GL_FIXED, 0, myColorBuffer ); gl.glDrawElements//繪製圖形 ( GL10.GL_TRIANGLES, //填充模式,這裡是以三角形方式填充 iCount, //頂點數量 GL10.GL_UNSIGNED_BYTE, //索引值的類型 myIndexBuffer //索引值資料 ); }}
|
沒有留言:
張貼留言