2012-04-02 7 views
0

Android 용 OpenGL을 사용하여 2D 이미지를 그립니다.Android OpenGL es "glDrawTexfOES"가 거꾸로 그립니다.

는 때마다 나는 코드를 사용하여 뭔가를 그릴 :

gl.glViewport(aspectRatioOffset, 0, screenWidth, screenHeight); 
    gl.glMatrixMode(GL10.GL_PROJECTION); 
    gl.glLoadIdentity(); 

    GLU.gluOrtho2D(gl, aspectRatioOffset, screenWidth + aspectRatioOffset,screenHeight, 0); 

    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glLoadIdentity(); 
    gl.glEnable(GL10.GL_TEXTURE_2D); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, myScene.neededGraphics.get(ID).get(animationID).get(animationIndex)); 

    crop[0] = 0; 
    crop[1] = 0; 
    crop[2] = width; 
    crop[3] = height; 
    ((GL11Ext)gl).glDrawTexfOES(x, y, z, width, height) 

내가 결과를 거꾸로을 내려.

crop[0] = 0; 
    crop[1] = height; 
    crop[2] = width; 
    crop[3] = -height; 

이 그러나 내 응용 프로그램의 로직을 해치지 않는, 그래서 나는 거꾸로 뒤집어 수 없습니다하는 결과를 싶습니다 I'v 사람들이 일을 통해이 문제를 해결 보았다. 아무도 왜 그런 일이 일어나는지, 그리고 그것을 피하거나 해결할 수있는 방법을 알고 있습니까?

편집 :

int[] crop = new int[4]; 
    crop[0] = 0; 
    crop[1] = imageDimension[ID][1]; 
    crop[2] = imageDimension[ID][0]; 
    crop[3] = -imageDimension[ID][1]; 

    ((GL11)gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, crop, 0); 
    ((GL11Ext)gl).glDrawTexfOES(x, ScreenHeight - y - height, 0, width, height); 

답변

3

거꾸로 정의 : 나는 그것이 좋은 있는지 알고하지 않습니다하지만 내가하는 솔루션을 발견했다. OpenGL은 디스플레이의 왼쪽 하단에 (0, 0)을 정의하여 y가 위로 향하도록합니다. glDrawTexOES은 윈도우 좌표에서 작동하도록 명시 적으로 정의되어 있으므로 ES 1.0에서도 중간에 행렬 스택이 없습니다. OpenGL이 거꾸로 간주하는 좌표로 좌표를 뒤집기 위해 프로젝션 또는 모델 뷰 행렬을 설정 한 경우 glDrawTexOES을 호출하는 동안 아무런 영향을 미치지 않습니다.

일반적으로 사람들은 OpenGL의 원점 배치를 무시하기 때문에 그래픽을로드 할 때 암시 적으로 뒤집어서 glDrawTexOES을 사용할 때 그래픽이 거꾸로 표시됩니다. 올바른 해결책은 나중에 좌표를 수동으로 뒤집고 싶지 않으면 이미지를로드 할 때 및/또는 매트릭스 스택을 설정할 때 암시 적으로 뒤집지 마십시오.

+0

저는 OpenGL을 처음 접했고 캔버스를 사용한 프로젝트를 좀 더 효율적으로 사용하기 시작했습니다. 이 단계 이전에 뭔가 잘못 이해했을 가능성이 높습니다. 더 자세히 살펴 보겠습니다. – Alle

+0

저장된 텍스쳐를 왼쪽 상단에있는 것으로 생각하고 다른 곳에서 텍스쳐 좌표를'glDrawTexOES'에 고정하는 것을 선호한다고 가정하는 텍스쳐 로딩 시스템을 고정하려고 시도한 것 이외에는 아무 잘못도하지 않았을 가능성이 더 큽니다. API의 나머지 부분과는 달리 직접 창 좌표를 사용하므로 좌표를 보이지 않게 뒤집을 기회를 얻지 못합니다. – Tommy

+0

만약 내가 올바르게 이해했다면, 내 코드는 이미 이미지를 뒤집어 놓았을 것입니다.하지만 glDrawTexOES가 Canvas와 같은 좌표 시스템을 가지고 있기 때문에 그렇게하고 싶지 않습니다. – Alle