2011-08-07 40 views
1

Hy我在openGL-ES紋理中遇到了一點問題。我在3ds max中創建了一個模型,並使用了UV貼圖,因爲您可以看到here(1st。picture)有我的UV貼圖。 沒有UV映射我的紋理加載是「完美的」,但與UV地圖...(第二張照片here),看轉向架)。UV貼圖的OpenGL-ES紋理加載問題

我從obj文件加載這個modell(轉向架),我的代碼或obj沒有任何問題,因爲它使用簡單的紋理,也許我的loadtexture方法不好,請檢查它,或者你有什麼想法? 謝謝你的回答,我沒有想法。

Loadtexture代碼:

private int[] textures = new int[3]; 
    public void loadtexture(GL10 gl, Context mContext, String map_source) { 
      try { 
       InputStream is = mContext.getAssets().open(map_source); 
       Bitmap bitmap = BitmapFactory.decodeStream(is); 
       is.close(); 
       gl.glGenTextures(3, textures, 0); 

       gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
         GL10.GL_NEAREST); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
         GL10.GL_NEAREST); 
       GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 


       gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[1]); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
         GL10.GL_LINEAR); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
         GL10.GL_LINEAR); 
       GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 

       gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[2]); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
         GL10.GL_LINEAR); 
       gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
         GL10.GL_LINEAR_MIPMAP_NEAREST); 
       if (gl instanceof GL11) { 
        gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP, 
          GL11.GL_TRUE); 
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 
       } else { 
        buildMipmap(gl, bitmap); 
       } 
       bitmap.recycle(); 
      } catch (IOException e) { 
       // Should never happen 
      } 
     } 

     private void buildMipmap(GL10 gl, Bitmap bitmap) { 
      // 
      int level = 0; 
      // 
      int height = bitmap.getHeight(); 
      int width = bitmap.getWidth(); 

      // 
      while (height >= 1 || width >= 1) { 

       GLUtils.texImage2D(GL10.GL_TEXTURE_2D, level, bitmap, 0); 

       // 
       if (height == 1 || width == 1) { 
        break; 
       } 

       // Increase the mipmap level 
       level++; 

       // 
       height /= 2; 
       width /= 2; 
       Bitmap bitmap2 = Bitmap.createScaledBitmap(bitmap, width, height, 
         true); 

       // Clean up 
       bitmap.recycle(); 
       bitmap = bitmap2; 
      } 
     } 

附:對不起我的英語不好。

回答

2
private int[] textures = new int[3]; 
    public void loadtexture(GL10 gl, Context mContext, String map_source) { 
      try { 
InputStream is = mContext.getAssets().open(map_source); 
      Bitmap bitmap2 = BitmapFactory.decodeStream(is); 
      is.close(); 
      Matrix flip = new Matrix(); 
      flip.postScale(1f, -1f); 
      Bitmap bitmap = Bitmap.createBitmap(bitmap2, 0, 0, bitmap2.getWidth(), bitmap2.getHeight(), flip, true); 
      bitmap2.recycle(); 
... (same like before) 

所以我把它垂直翻轉了,因爲加載地圖在opengl中有點不同。我希望我幫助那些陷入同樣問題的人。