在openGL中用Android绘制圆圈

问题描述:

我正在寻找一种方法来绘制基本上充当地平线的圆的OUTLINE。我不想填满这个圆圈,但是只要有一条白线可以看到,即使当你从侧面看它时,它也能看到它。这是可能的吗?有人可以给我看一个教程或告诉我如何?在openGL中用Android绘制圆圈

有比SteveL发布的更有效的方法。

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

该页面提供对OpenGL的过程中一个非常明确的步进式,但是你可以很容易地申请史蒂夫的答案,使其在OpenGL ES工作:

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

+0

我喜欢他已经解释过如何绘制而不反复使用三角函数的方式。虽然我很想问,他是如何计算tx,ty值的。 – 2012-06-09 13:27:47

+0

另外一个绘制弧的解释,以便考虑方向(CW或CCW)将是有用的。如果你有例如。我们使用slabode代码绘制圆形连接的偏移多边形,则开始和结束角度可以按任何顺序排列。另外一个多边形本身可以是CW或CCW,所以缠绕顺序非常重要。但是,如果弧角(结束角度)大于起始角度,代码工作得很好。 – 2013-02-08 20:58:55

+0

链接无法正常工作 – Confuse 2017-09-08 05:23:07

我认为,如果你使用gl.glLineWidth(20);(或者其他大小)的线THIK将incease太(propably我错了,但值得一试)

为了得到一个圆的verices :

 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); 
+0

真棒感谢..如果我现在想从空心圆每隔5度垂直画一条线我会同时做还是再次穿过阵列? – erik 2012-02-21 05:37:38