2012-02-20 3 views
3

기본적으로 수평선 역할을하는 원의 윤곽선을 그리는 방법을 찾고 있습니다. 나는 원을 채우기를 원하지 않지만 대신 평면에서 보았을 때 옆에서 보았을 때 볼 수있는 흰색 선이 있습니다. 가능한가요? 누군가 내게 튜토리얼을 보여 주거나 어떻게 말해 줄 수 있습니까?OpenGL을 사용하여 안드로이드에 원을 그립니다.

는 원의 verices 효율적으로 활용하려면 (propably 내가 잘못하지만 노력의 가치입니다) (또는 다른 크기) 라인의 thik이 너무 incease 것이다

답변

8

SteveL이 게시 한 것보다 효율적인 방법이 있습니다.

각 점 (계산법이 비싼 방법)에 대한 삼각 함수를 계산하는 대신 현재 점, 접선 벡터 및 코사인 벡터를 기반으로 원 위에 다음 점을 찾을 수 있습니다. 삼각 함수는 한 번 계산 된 다음 각 후속 점은 일련의 곱셈이며 훨씬 빠릅니다.

이 페이지는 OpenGL을위한 과정의 매우 명확 스텝을 통해 제공,하지만 당신은 쉽게에서 OpenGL ES에서 작동하도록 스티브의 답변을 적용 할 수 있습니다 : 지금 원한다면 ..

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

+0

나는 trig 함수를 반복적으로 사용하지 않고 그리는 방법을 설명해 준 방법을 좋아합니다. 비록 그가 물음표를 어떻게 계산했는지 묻고 싶습니다. –

+0

또한 방향 (CW 또는 CCW)이 고려되도록 호 그리기에 대한 설명이 유용합니다. 예를 들면. slabode 코드를 사용하여 라운드 조인을 그릴 오프셋 다각형, 시작 및 끝 각도는 순서에 관계없이 지정할 수 있습니다. 또한 다각형 자체가 CW 또는 CCW 일 수 있으므로 권선 순서가 매우 중요합니다. 원호 각도 (끝 각도)가 시작 각도보다 큰 경우 코드는 훌륭하게 작동합니다. –

+0

링크가 작동하지 않습니다. – Confuse

3

난 당신이 gl.glLineWidth (20)를 사용하는 경우라고 생각 :

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

는 빈 원을

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

을 원하는 경우 GL10.GL_LINES로 그리거나 당신이 작성하려는 경우 GL10.GL_TRIANGLE_FAN로 그리는 하나

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

최고 감사 빈 원에서 매 5도 직각으로 한 줄을 그립니다. 동시에 그것을할까요, 아니면 다시 배열을 통과할까요? – erik

관련 문제