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

OpenGL ES 绘制圆环

2015-08-12 21:00 459 查看
1、新建 MyRingRenderer.h

/*
* 圆环
*/
public class MyRingRenderer extends MyAbstractRenderer {
private float r_inner =0.2f; //内环 半径
private float r_ring  =0.3f; //圆环 环半径

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) {

int ringCount  =20;//把圆环 切成20块
int blockCount =20;//把圆 切成20块

float alpha =0;
float beta  =0;
float alphaStep =(float) ((2*Math.PI) /ringCount);
float betaStep  =(float) ((2*Math.PI) /blockCount);

List<Float> pos =new ArrayList<Float>();

for(int i =0;i <ringCount;i++){
//一次画两个相邻的圆
alpha =i *alphaStep;
for(int j =0; j <blockCount; j++){
beta =j *betaStep;
// z值为0的 以(0,0)点线段长度
float lineD =(float) (r_inner +r_ring +r_ring *Math.cos(beta));
// 投影到 x,y轴
float x0 =(float) (Math.cos(alpha) *lineD);
float y0 =(float) (Math.sin(alpha) *lineD);
//由于 z轴靠近人的为正方向  +Math.PI
float z0 =(float) (Math.sin(beta +Math.PI) *r_ring);

float x1 =(float) (Math.cos(alpha +alphaStep) *lineD);
float y1 =(float) (Math.sin(alpha +alphaStep) *lineD);
float z1 =z0;

pos.add(x0);
pos.add(y0);
pos.add(z0);
pos.add(x1);
pos.add(y1);
pos.add(z1);
}
}
ByteBuffer bb =BufferUtil.list2ByteBuffer(pos);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, bb);
gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, pos.size()/3);
}
}


2、运行效果



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