开发者

Texture coordinates in opengl android showing image reversed

开发者 https://www.devze.com 2023-01-31 18:56 出处:网络
I wrote opengl android code to show a bitmap on a square. But bitmap was drawn in reverse. When i change texture array combination to the commented code it is drawn correctly. But i insist my texture

I wrote opengl android code to show a bitmap on a square. But bitmap was drawn in reverse. When i change texture array combination to the commented code it is drawn correctly. But i insist my texture array must be as below . Am i thinking wrong ?

  /** 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 te开发者_运维技巧xture 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,           
                                          };


Whereas Android uses the top-left corner as being 0,0 of the coordinate system, OpenGL uses the bottom-left corner being 0,0 which is why your texture gets flipped.

A common solution to this is to flip your texture at load time,

Matrix flip = new Matrix();
flip.postScale(1f, -1f);
Bitmap bmp = Bitmap.createBitmap(resource, 0, 0, resource.getWidth(), resource.getHeight(), flip, true);


Actually, I think Will Kru's solution should have flipped the background around both axes

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

That solution worked for me!


This worked for me. (no need to create another bitmap and scale)

 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

精彩评论

暂无评论...
验证码 换一张
取 消