Android中的OpenglES Ellipse

时间:2011-04-30 20:51:08

标签: android opengl-es

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

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

1 个答案:

答案 0 :(得分: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;