用openGL在android中绘制一个圆圈

时间:2012-02-20 01:06:07

标签: android opengl-es

我正在寻找一种方法来绘制一个基本上充当地平线的圆的轮廓。我不想填充圆圈,而是只有一条白线,即使你从侧面看它也可以看到,因为它平放..这可能吗?有人可以给我看一个教程或告诉我怎么做?

2 个答案:

答案 0 :(得分:8)

有一种比SteveL发布的更有效的方式。

您可以根据当前点,切线向量和余弦向量找到圆上的下一个点,而不是计算每个点的触发函数(计算量很大的方法)。 trig函数计算一次,然后每个后续点都是一系列乘法,速度要快得多。

此页面提供了一个非常明确的OpenGL流程步骤,但您可以轻松应用Steve的答案,使其在OpenGL ES中运行:

http://slabode.exofire.net/circle_draw.shtml

答案 1 :(得分:3)

我认为如果你使用gl.glLineWidth(20);(或其他尺寸),线的thik也会增加(可能我错了但值得尝试)

获取圆圈的错误:

     float[] verts=MakeCircle2d(1,100,0,0)

     public static float[] MakeCircle2d(float rad,int points,float x,float y)//x,y  ofsets
     {
            float[] verts=new float[points*2+2];
            boolean first=true;
            float fx=0;
            float fy=0;
            int c=0;
            for (int i = 0; i < points; i++)
            {
                    float fi = 2*Trig.PI*i/points;
                    float xa = rad*Trig.sin(fi + Trig.PI)+x ;
                    float ya = rad*Trig.cos(fi + Trig.PI)+y ;
                    if(first)
                    {
                        first=false;
                        fx=xa;
                        fy=ya;
                    }
                    verts[c]=xa;
                    verts[c+1]=ya;
                    c+=2;
            }
            verts[c]=fx;
            verts[c+1]=fy;
            return verts;
      }

如果你想要一个空圆圈,请将其绘制为GL10.GL_LINES

 gl.glDrawArrays(GL10.GL_LINES, 0, verts.length / 2);

如果您想要填充

,请将其绘制为GL10.GL_TRIANGLE_FAN
 gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, verts.length / 2);