歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenGL png圖片 紋理貼圖,去除png圖片黑邊

OpenGL png圖片 紋理貼圖,去除png圖片黑邊

日期:2017/3/1 10:12:48   编辑:Linux編程

將png圖片作為紋理貼圖,在圖片周圍會產生黑邊,在網上查了一下,都沒有明確指出解決方法!廢話不說了,看代碼。

1.初始化

  1. protected void init(GL10 gl) {
  2. // Setup background color
  3. gl.glClearColor(1, 1, 1, 1);
  4. gl.glEnable(GL10.GL_BLEND);
  5. gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
  6. glEnable(GL_DEPTH_TEST);
  7. glEnable(GL10.GL_ALPHA_TEST); // Enable Alpha Testing (To Make BlackTansparent)
  8. glAlphaFunc(GL10.GL_GREATER,0.1f); // Set Alpha Testing (To Make Black Transparent)
  9. // Setup project matrix
  10. gl.glMatrixMode(GL10.GL_PROJECTION);
  11. gl.glLoadIdentity();
  12. GLU.gluOrtho2D(gl, 0.0f,1.3f,0.0f,1.0f);
  13. gl.glEnable(GL10.GL_TEXTURE_2D);
  14. gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff);
  15. gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
  16. tex = loadTexture(gl, bmp);
  17. // Smooth shading
  18. gl.glShadeModel(GL10.GL_SMOOTH);
  19. }

2.加載紋理貼圖

  1. protected static int loadTexture(GL10 gl, Bitmap bmp, boolean reverseRGB) {
  2. int[] textures = new int[1];
  3. glGenTextures(1, textures, 0);
  4. int mTextureID = textures[0];
  5. glBindTexture(GL_TEXTURE_2D, mTextureID);
  6. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);
  7. glTexParameterf(GL_TEXTURE_2D,
  8. GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  9. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
  10. GL_CLAMP_TO_EDGE);
  11. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
  12. GL_CLAMP_TO_EDGE);
  13. glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
  14. GL_REPLACE);
  15. GLUtils.texImage2D(GL_TEXTURE_2D, 0, bmp, 0);
  16. bmp.recycle();
  17. return mTextureID;
  18. }

3.效果圖

Copyright © Linux教程網 All Rights Reserved