1. 程式人生 > >OpenGL ES 使用頂點索引繪製立方體

OpenGL ES 使用頂點索引繪製立方體

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、執行效果