2012-04-06 2 views
0

OpenGLES로 작업하면서 처음 10 분 안에 알아 차 렸던 문제가 있습니다. 실제로 함수 호출은 거의 동일하지만 메서드 설정 방법은 완전히 다릅니다.OpenGl ES 2D 안드로이드 다시 그리기

OpenGL에서 폴리곤 애니 메이팅의 기본 사항을 이해합니다. modelmatrix를 변경 한 다음 장면을 다시 드로잉하고 이중 버퍼링을 사용하여 빠르게 이동하거나 빠르게 업데이트 할 때 나타나는 지연을 줄이는 아이디어.

여기 내 질문입니다. 나는 어떻게 그것을 달성 할까. C 또는 C++ OpenGl에서 장면을 다시 그리는 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

그들은 glVertexXY로 어떤 이유인지 잘 모릅니다. 내가 읽었던 것에서 사람들은 그것이 비효율적이라고 말했다. .. 그 인터넷. 그래서 나는 거대한 소금물로 그것을 잡는다. 나는 오늘 밤 집에 도착했을 때 glsurfaceview를 들여다 보지 않았습니다. 감사합니다! – Elliott

답변

0

즉시 모드와 모드 API를 유지 사이의 차이를 설명하는 모습 here을 가지고하시기 바랍니다. 나는 OpenGL wiki에서 뭔가 괜찮은 것을 찾지 못했습니다. 즉각에 대한 언급이 전혀 없습니다. Kurt Akelay and Pat Hanrahan 좋은 슬라이드가 있습니다. "Interface Choices"를 검색하십시오. 이것들은 신뢰할 수 있습니다. 단지 trust me)

+0

무슨 뜻인지 알 겠어. 하지만 제 질문은 여전히 ​​어떻게 다시 그리는 지 다시 돌아옵니다. 버튼 리스너를 갖고 화면에서 문자를 움직이기를 원합니다. – Elliott

+0

흠, 이것은 변경되지 않았습니다. 그리기 전에 모든 버퍼를'glClear'하고 그려야합니다. 'GLSurfaceView'는 이중 버퍼링을 처리합니다. 어쩌면 오해를 없애기 위해 코드를 게시 할 수 있습니까? –

+0

Stefan, 감사합니다. OpenGL ES에서 수행하려고하는 것을 확인하기 위해 몇 가지 코드를 추가했습니다. display()를 생략했습니다. 기능하지만 기본적으로 안드로이드에 누군가가 화면의 버튼을 눌러 스프라이트의 위치를 ​​업데이트 한 다음 캔버스를 다시 표시하게 할 수 있습니다. 다시 한 번 감사드립니다 – Elliott

관련 문제