2012-02-20 220 views
3

我正在尋找一種方法來繪製基本上充當地平線的圓的OUTLINE。我不想填滿這個圓圈,但是隻要有一條白線可以看到,即使當你從側面看它時,它也能看到它。這是可能的嗎?有人可以給我看一個教程或告訴我如何?在openGL中用Android繪製圓圈

回答

8

有比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

3

我認爲,如果你使用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