2012-04-06 112 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