2012-04-06 188 views
0

我在使用OpenGLES的前10分鐘內發現了一些問題,實際上函數調用大多是相同的,但是如何設置您的方法完全不同。OpenGl ES 2D Android redraw

我理解在OpenGL中動畫多邊形的基礎知識。改變模型矩陣,然後重新繪製場景並使用雙緩衝來減少快速移動或快速更新內容時出現的延遲。

所以在這裏我的問題。我將如何完成相同的工作。在C或C++的OpenGl中,我可以使用自己的方法調用將重新繪製場景的display()函數。

我環顧四周,不得不重新學習如何繪製一個簡單的多邊形。我認爲它是完全不同的。我在這裏環顧四周,我已經找到了一些關於事物的教程,但似乎沒有什麼能真正推動變革背後的方法論。我有興趣瞭解它與複製。

感謝

新材料:

這裏是我想在android系統來實現的。這段代碼是用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)? – 2012-04-06 05:19:40

+0

雅他們因爲我不確定的原因而取消了glVertexXY。從我讀到的人們都說,它效率低下......它的互聯網,所以我用了一大片鹽。今晚我回家時我還沒有看過glsurfaceview,我會感謝! – Elliott 2012-04-06 16:11:16

回答

0

請看看here,這很好地解釋了之間立即模式和保留模式的API的差異。我在OpenGL wiki(在任何地方都沒有提及立即)沒有找到合適的東西。 Kurt Akelay and Pat Hanrahan有一些很好的幻燈片;搜索「接口選擇」。這些都是值得信賴的,只是信任我;)

+0

我明白你的意思了。但是我的問題仍然回到你如何重新繪製。我希望能夠擁有一個按鈕偵聽器並在屏幕上移動一個字符。 – Elliott 2012-04-10 13:13:06

+0

嗯,這並沒有改變 - 你需要在繪製之前對所有緩衝區進行glClear處理,然後繪製。 'GLSurfaceView'爲您提供雙緩衝。也許,爲了消除誤解,你可以發佈一些代碼? – 2012-04-10 13:59:43

+0

Stefan,謝謝我已經添加了一些代碼給你,看看我想在OpenGL ES中完成什麼,我省略了display();功能,但基本上我想在Android有人能夠按下屏幕上的按鈕更新精靈的位置,然後重新顯示畫布。再次感謝 – Elliott 2012-04-10 16:20:14