1、新建 MyColorCubeRenderer.java
/*
* 颜色立方体
*/
public class MyColorCubeRenderer extends MyAbstractRenderer {
public void onSurfaceCreated(GL10 gl, EGLConfig arg1) {
//设置清屏色(背景)
gl.glClearColor(0, 0, 0, 1);
//启用顶点缓冲区
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 颜色缓冲区
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
//启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
//启用表面剔除 //剔除 :如果看不见 就告诉openGL 不用绘制 (提高性能)
gl.glEnable(GL10.GL_CULL_FACE);
//openGL默认 逆时针为正面
gl.glFrontFace(GL10.GL_CCW);//逆时针 为正面
}
protected void drawBefore(GL10 gl) {
//清除颜色缓冲区 |深度缓冲区
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_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[]={
7,4,3,3,4,0,
3,0,2,2,0,1,
2,1,6,6,1,5,
7,6,5,5,4,7,
6,7,3,6,3,2,
1,0,4,1,4,5,
};
//颜色
float []colors={
0f ,1f ,1f ,1f,
0f ,1f ,0f ,1f,
1f ,1f ,1f ,1f,
1f ,1f ,0f ,1f,
0f ,0f ,1f ,1f,
0f ,0f ,0f ,1f,
1f ,0f ,1f ,1f,
1f ,0f ,0f ,1f,
};
gl.glCullFace(GL10.GL_BACK);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, BufferUtil.arr2ByteBuffer(colors));
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, BufferUtil.arr2ByteBuffer(pos));
//使用索引画图
gl.glDrawElements(GL10.GL_TRIANGLES, index.length, GL10.GL_UNSIGNED_BYTE, BufferUtil.arr2ByteBuffer(index));
}
}
2、立方体顶点图
3、运行效果