2012-04-06 2 views
0

У меня возникла небольшая проблема, которую я заметил в течение первых 10 минут работы с OpenGLES, что на самом деле вызовы функций в основном одинаковы, однако то, как вы настраиваете свои методы, совершенно иное.OpenGl ES 2D Android redraw

Я понимаю основы анимации многоугольника в OpenGL. Идея изменения модели, а затем повторного рисования сцены и использования двойной буферизации, чтобы сократить отставание, которое вы видите при быстром перемещении или обновлении вещей быстро и много.

Итак, здесь мой вопрос. Как бы я сделал то же самое. В OpenGl на C или C++ у меня может быть свой собственный метод, который вызывает функцию display(), которая будет повторно рисовать сцену.

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

Благодаря

Нового материала:

Вот что я пытаюсь достичь в андроиде. Этот код находится на C. Из моего чтения, как я понимаю OpenGL, не рекомендуется, но я чувствую, что все равно могу добиться того же.

Этот код отражает, что у вас есть слушатель, который ждет нажатия кнопки, и после этого он выполняет соответствующий код и повторно рисует дисплей. Это из моего понимания, если оно отличается от OpenGL ES.

void main(int argc, char** argv) 
    { 

     /* Standard GLUT initialization */ 

     glutInit(&argc,argv); 

     /* default, not needed */ 
     glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);  

     glutInitWindowSize(500,500); /* 500 x 500 pixel window */ 

     /* place window top left on display */ 
     glutInitWindowPosition(0,0);  

     glutCreateWindow("COMP-5/6400 Assignment 2"); /* window title */ 

     /* display callback invoked when window opened */ 
     glutDisplayFunc(display); 
     glutSpecialFunc (processSpecialKeys); 
     myinit(); /* set attributes */ 

     glutMainLoop(); /* enter event loop */ 
    } 

    void processSpecialKeys(int key, int x, int y) 
    { 
     switch(key){ 
      case GLUT_KEY_UP: 
       moveUp(); 
      break; 
      case GLUT_KEY_DOWN: 
        moveDown(); 
      break; 
      case GLUT_KEY_LEFT: 
       moveLeft(); 
      break; 
      case GLUT_KEY_RIGHT: 
       moveRight(); 
      break; 
     } 
    } 

    void moveUp(){ 
    personX= (5.0*cosf(personRota))+personX; 
    personY= (5.0*sinf(personRota))+personY; 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    display(); 
    } 
+0

Вы имеете в виду, что 'glVertexXY' больше нет? И - если вы этого не говорили - вы нашли ['GLSurfaceView'] (http://developer.android.com/reference/android/opengl/GLSurfaceView.html)? –

+0

Ya они покончили с glVertexXY, по какой причине я не уверен. Из того, что я прочитал, люди сказали, что это неэффективно ... его интернет, поэтому я беру это с ОГРОМНЫМ зерном соли. Я не смотрел в glsurfaceview, когда я возвращаюсь домой сегодня, я буду благодарен! – Elliott

ответ

0

Пожалуйста, посмотри here, который хорошо объясняет разницу между немедленным режимом и сохранил API, режима. Я не нашел что-то приличное в OpenGL wiki (без упоминания сразу в любом месте). Kurt Akelay and Pat Hanrahan есть хорошие слайды; найдите «Интерфейсный выбор». Им нужно доверять, только trust me;)

+0

Я понимаю, что вы имеете в виду. Но мой вопрос все еще возвращается к тому, как вы делаете повторную ничью. Я хочу иметь возможность прослушивать кнопки и перемещать символ по экрану. – Elliott

+0

Хм, это не изменилось - вам нужно «glClear» все буферы перед рисованием, а затем рисовать. «GLSurfaceView» заботится о двойной буферизации для вас. Возможно, чтобы устранить недоразумения, вы могли бы опубликовать некоторый код? –

+0

Stefan, Спасибо. Я добавил код для вас, чтобы увидеть, что я пытаюсь выполнить в OpenGL ES. Я опустил display(); но в основном я хочу, чтобы в андроиде кто-то мог нажать кнопку на экране, обновить местоположение спрайта, а затем повторно отобразить холст. Еще раз спасибо – Elliott

Смежные вопросы