您的位置:首页 > 运维架构

OpenGL ES 画球

2015-08-11 21:17 211 查看
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、运行效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android OpenGL ES