OpenGL ES 使用頂點索引繪製立方體
阿新 • • 發佈:2019-01-07
1、新建 MyCubeRenderer.java
/* * 立方體 */ public class MyCubeRenderer extends MyAbstractRenderer{ public void onSurfaceCreated(GL10 gl, EGLConfig arg1) { //設定清屏色(背景) gl.glClearColor(0, 0, 0, 1); //啟用頂點緩衝區 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); } protected void drawBefore(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT); } protected void draw(GL10 gl) { float r =0.3f; //八個頂點的座標 //以立方體的中心點為(0,0,0) 點 float pos[] ={ -r ,-r ,r , r ,-r ,r , r , r ,r , -r , r ,r , -r ,-r ,-r , r ,-r ,-r , r , r ,-r , -r , r ,-r , }; //繪製 點得索引 byte index[]={ 0,4,7,3, 7,6,2, 6,5,1, 5,4,0, 3,2,1,0 }; gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.arr2ByteBuffer(pos)); //使用索引畫圖 gl.glDrawElements(GL10.GL_LINE_STRIP, index.length, GL10.GL_UNSIGNED_BYTE, BufferUtil.arr2ByteBuffer(index)); } }
2、修改 BufferUtil.java 檔案
新增方法
public static ByteBuffer arr2ByteBuffer(byte[] arr){
//分配位元組緩衝區空間,存放頂點座標
ByteBuffer ibb=ByteBuffer.allocateDirect(arr.length);
//設定順序(本地資料)
ibb.order(ByteOrder.nativeOrder());
//放置頂點座標陣列
ibb.put(arr);
//定位指標位置,從該位置開始讀取頂點資料
ibb.position(0);
return ibb;
}
3、立方體頂點圖
4、執行效果