рисование круга в Android с OpenGL - PullRequest
3 голосов
/ 20 февраля 2012

Я ищу способ нарисовать план круга, который в основном будет действовать как линия горизонта. Я не хочу заполнять круг, но вместо этого просто имею белую линию, которую можно увидеть, даже если вы смотрите на нее сбоку, когда она лежит ровно ... это возможно? Может кто-нибудь показать мне учебник или сказать, как?

Ответы [ 2 ]

8 голосов
/ 29 марта 2012

Существует более эффективный способ, чем опубликованный SteveL.

Вместо того, чтобы вычислять тригонометрические функции для каждой точки (вычислительно дорогой метод), вы можете найти следующую точку на окружности на основе текущейточка, касательный вектор и вектор косинуса.Функции триггера рассчитываются один раз, затем каждая последующая точка представляет собой последовательность умножений, которые выполняются намного быстрее.

На этой странице представлен очень четкий пошаговый процесс OpenGL, но вы можете легко применить ответ Стива.чтобы заставить его работать в OpenGL ES:

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

3 голосов
/ 20 февраля 2012

Я думаю, что если вы используете 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;
      }

Нарисуйте его как 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...