2011-04-30 90 views
2

我想在android中绘制椭圆/圆,但是我很难让它显示出来。我可以在OpenGL中使用无效循环和glVertex在C中完成(不是在Android中),但是OpenGL ES看起来不同,我有些迷失方向。我的椭圆类在下面。我希望能够在构造函数中定义所有顶点,并使用draw()方法绘制它们。Android中的OpenglES椭圆

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); 
    } 
} 

回答

0

我想通了这个问题。我在x/y计算中忽略了* i。

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