Android OpenGL es "glDrawTexfOES" рисует вверх ногами - PullRequest
0 голосов
/ 03 апреля 2012

Я использую OpenGL для Android для рисования своих 2D-изображений.

Всякий раз, когда я рисую что-то, используя код:

    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;

Это, однако, вредит логике в моем приложении, поэтому я бы хотел, чтобы результат не переворачивался с ног на голову.Кто-нибудь знает, почему это происходит, и есть ли способ избежать или решить его?

Редактировать: Я нашел решение, хотя не знаю, хорошее ли оно:

    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);

1 Ответ

3 голосов
/ 03 апреля 2012

Определить с ног на голову.OpenGL определяет (0, 0), чтобы быть в левом нижнем углу дисплея с y, идущим вверх.glDrawTexOES явно определено для работы в оконных координатах, поэтому между матрицами нет стека даже в ES 1.0.Если вы настроили свои матрицы проекций или моделей для перестановки координат на то, что OpenGL считает перевернутым, то это не будет иметь никакого эффекта во время вызова glDrawTexOES.

Что обычно происходит, так это то, что люди неявно переворачиваютих графика при загрузке (потому что они игнорируют расположение источника в OpenGL), в результате чего они появляются вверх ногами при использовании glDrawTexOES.Правильное решение состоит в том, что если вы не хотите позже переворачивать координаты вручную, то не переворачивайте их неявно при загрузке изображений и / или при настройке стеков матрицы.

...