2015-09-03 60 views
-2

我想繪製一個使用OpenGL的圓,除了我希望每個扇區(總共18個)被繪製爲一個單獨的形狀,因此我可以以不同的方式格式化每個扇區。我會怎麼做呢?分別繪製一個圓的每個扇區

這是迄今爲止我嘗試,它比對方enter image description here

int x = 480/2; 
int y = (255/2)-15; 
int r = 90; 
int sectors = 90; //5x amount of actual sectors 

GL11.glPushMatrix(); 
    GL11.glColor4f(0.6F, 0.6F, 0.6F, 0.3F); 
    GL11.glBegin(GL11.GL_TRIANGLE_FAN); 
     GL11.glVertex2f(x, y); 
     for(int i = 0; i < 18; i++) 
     { 
      for(int n = 0; n <= sectors/18; n++) 
      { 
       float t = 2 * 3.14152f * (float)n/(float)sectors; 
       GL11.glVertex2d(x + Math.sin(t) * r, y + Math.cos(t) * r); 
      } 
     } 
    GL11.glEnd(); 
GL11.glPopMatrix(); 

這是一個僞造的Minecraft國防部吸引18個行業。

+0

那沒有圈。你的代碼應該做什麼,你確切的問題是什麼? – Polygnome

+0

我的代碼應該是18個扇區的一部分,但事實並非如此。我的問題是我缺乏數學技能。我已經設法弄清楚了,但我會發布答案。 –

+0

哦,不! glBegin(),我敢打賭,這就是爲什麼這個圈子沒有繪畫......只是在說'。 –

回答

0
   //Place circle slightly above centre of screen 
      int x = 480/2; 
      int y = (255/2) - 15; 

      int r = 90; 
      int sectors = 90; // Circle quality 

      GL11.glPushMatrix(); 
      GL11.glColor4f(0.6F, 0.6F, 0.6F, 0.3F); 
      GL11.glBegin(GL11.GL_TRIANGLE_FAN); 
      GL11.glVertex2f(x, y); 
      for(int i = 0; i < 18; i++) 
      { 
       for(int n = 0+(i*5); n <= (sectors/18) + (i*5); n++) //I just had to re-multiply the sectors to get up to 90 and carry on where the last sector left off. 
       { 
        float t = 2 * 3.14152f * (float) n/(float) sectors; 
        GL11.glVertex2d(x + Math.sin(t) * r, y + Math.cos(t) * r); 
       } 
      } 
      GL11.glEnd(); 
      GL11.glPopMatrix();