1、新建MyBallRenderer.java 文件
public class MyBallRenderer 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.6f; //球半径
int tiers =12; //总共12层
int blocks =32; //一个圆分32块
float tiersAnger =(float) (Math.PI / tiers); // 一个层的角度差
float blockAngle =(float) ((Math.PI *2) / blocks);// 一个圆每个的角度差
List<Float> pos =new ArrayList<Float>();
for(int i =0;i <tiers; i++){
//一次画两个圆层
float alpha0 =(float) ((-Math.PI/2) +(i *tiersAnger)) ;
float alpha1 =(float) ((-Math.PI/2) +((i +1) *tiersAnger)) ;
//y 值
float y0 =(float) (Math.sin(alpha0) *r);
float y1 =(float) (Math.sin(alpha1) *r);
//圆半径
float r0 =Math.abs((float) (Math.cos(alpha0) *r));
float r1 =Math.abs((float) (Math.cos(alpha1) *r));
for(int j=0;j <=blocks; j++){
//圆坐标
float x0 = (float) (Math.cos(j *blockAngle) *r0);
float z0 = (float) (Math.sin(j *blockAngle) *r0);
float x1 = (float) (Math.cos(j *blockAngle) *r1);
float z1 = (float) (Math.sin(j *blockAngle) *r1);
pos.add(x0);
pos.add(y0);
pos.add(z0);
pos.add(x1);
pos.add(y1);
pos.add(z1);
}
}
ByteBuffer pBB =BufferUtil.list2ByteBuffer(pos);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, pBB);
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, pos.size()/3);
}
}
2、修改 MainActivity.java onCreate方法
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MySurfaceView view=new MySurfaceView(this);
renderer=new MyBallRenderer();
view.setRenderer(renderer);
setContentView(view);
}
3、运行效果