2011-04-30 3 views
2

J'essaye de dessiner une ellipse/cercle dans android, mais j'ai du mal à le faire apparaître. Je peux le faire correctement dans OpenGL en C (pas en android) en utilisant une boucle inefficace et glVertex, mais OpenGL ES semble assez différent que je suis un peu perdu. Ma classe d'ellipse est ci-dessous. Je veux pouvoir définir tous les vertices du constructeur et les dessiner avec la méthode draw().OpenglES Ellipse dans Android

public class Ellipse { 
    private float _vertices[]; 
    private FloatBuffer _vertex_buffer; 
    private int _segments; 

    public Ellipse(int segments, float width, float height) { 
     _vertices = new float[segments*2]; 
     _segments = segments; 

     int count = 0; 
     for (float i = 0; i < 360.0f; i += (360.0f/_segments)) { 
      _vertices[count++] = (float)Math.cos(Math.PI/180.0f)*width; 
      _vertices[count++] = (float)Math.sin(Math.PI/180.0f)*height; 
     } 

     ByteBuffer vbb = ByteBuffer.allocateDirect(_vertices.length * 4); 
     vbb.order(ByteOrder.nativeOrder()); 
     _vertex_buffer = vbb.asFloatBuffer(); 
     _vertex_buffer.put(_vertices); 
     _vertex_buffer.position(0); 
    } 

    public void draw(GL10 gl) { 
     gl.glFrontFace(GL10.GL_CW); 

     gl.glVertexPointer(2, gl.GL_FLOAT, 0, _vertex_buffer); 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 

     gl.glDrawArrays(gl.GL_LINE_LOOP, 0, _segments); 

     gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
    } 
} 

Répondre

0

J'ai trouvé le problème. J'ai omis le * i dans le calcul x/y pour les points.

_vertices[count++] = (float)Math.cos(Math.PI/180.0f * i)*width; 
_vertices[count++] = (float)Math.sin(Math.PI/180.0f * i)*height;