Координаты текстуры в opengl android, показывающие перевернутое изображение - PullRequest
4 голосов
/ 23 декабря 2010

Я написал OpenGL Android-код, чтобы показать растровое изображение на квадрате. Но растровое изображение было нарисовано в обратном порядке. Когда я изменяю комбинацию текстурного массива на закомментированный код, он рисуется правильно. Но я настаиваю на том, что мой массив текстур должен быть таким, как показано ниже. Я не так думаю?

  /** The initial vertex definition */
  private float vertices[] = { 
                      -1.0f, 1.0f, 0.0f,      //Top Left
                      -1.0f, -1.0f, 0.0f,     //Bottom Left
                      1.0f, -1.0f, 0.0f,      //Bottom Right
                      1.0f, 1.0f, 0.0f        //Top Right
                                      };
  /** Our texture pointer */
  private int[] textures = new int[1];

  /** The initial texture coordinates (u, v) */
  private float texture[] = {         
          //Mapping coordinates for the vertices
//            1.0f, 0.0f,
//            1.0f, 1.0f,
//            0.0f, 1.0f,
//            0.0f, 0.0f,
          0.0f, 1.0f,
          0.0f, 0.0f,
          1.0f, 0.0f,
          1.0f, 1.0f,
                              };

    /** The initial indices definition */ 
    private byte indices[] = {
                      //2 triangles
          0,1,2, 2,3,0,           
                                          };

Ответы [ 3 ]

5 голосов
/ 24 декабря 2010

В то время как Android использует верхний левый угол как 0,0 системы координат, OpenGL использует нижний левый угол, равный 0,0, поэтому ваша текстура переворачивается.

Распространенное решение дляэто перевернуть текстуру во время загрузки,

Matrix flip = new Matrix();
flip.postScale(1f, -1f);
Bitmap bmp = Bitmap.createBitmap(resource, 0, 0, resource.getWidth(), resource.getHeight(), flip, true);
0 голосов
/ 30 сентября 2016

Это сработало для меня. (не нужно создавать другое растровое изображение и масштабировать)

 private float vertices[] = { 
                   1.0f, -1.0f, 0.0f,     //Bottom Right
                   1.0f,  1.0f, 0.0f,     //Top Right
                  -1.0f,  1.0f, 0.0f,     //Top Left
                  -1.0f, -1.0f, 0.0f,     //Bottom Left
              };
0 голосов
/ 12 июля 2013

На самом деле, я думаю, что решение Уилла Кру должно было перевернуть фон вокруг обеих осей

flip.postScale(-1f, -1f);

Это решение сработало для меня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...