package com.lmdig.android.tutorial.oglbox2dbasics.geometry;
import static android.opengl.GLES10.GL_TRIANGLE_FAN;
import static android.opengl.GLES10.glDrawArrays;
import static android.opengl.GLES10.glPopMatrix;
import static android.opengl.GLES10.glPushMatrix;
import static android.opengl.GLES10.glRotatef;
import static android.opengl.GLES10.glTranslatef;
import java.nio.FloatBuffer;
import java.lang.Math;
import com.lmdig.android.tutorial.oglbox2dbasics.tools.BufferTool;
import com.lmdig.android.tutorial.oglbox2dbasics.tools.GLBufferTool;
public class GLCircle extends Circle {
public static int NUM_VERTICES = 360;
FloatBuffer fbVertices;
public GLCircle() {
super();
}
public GLCircle(float r) {
super(r);
}
public void draw() {
GLBufferTool.setGLVertexBuffer(2, fbVertices);
glDrawArrays(GL_TRIANGLE_FAN,
0,
NUM_VERTICES);
}
public void draw(float x, float y, float angle) {
glPushMatrix();
glTranslatef(x, y, 0);
glRotatef((float)Math.toDegrees(angle), 0, 0, 1);
GLBufferTool.setGLVertexBuffer(2, fbVertices);
glDrawArrays(GL_TRIANGLE_FAN,
0,
NUM_VERTICES);
glPopMatrix();
}
@Override
protected void onUpdateSize() {
double angle;
float[] v = new float[NUM_VERTICES * 2];
for(int i = 0; i < NUM_VERTICES; i++) {
angle = i*2*Math.PI/100;
v[i*2] = (float)(Math.cos(angle) * getRadius());
v[i*2+1] = (float)(Math.sin(angle) * getRadius());
}
fbVertices = BufferTool.makeFloatBuffer(v);
}
}