2011-08-07 15 views
1

Hy OpenGL-ESテクスチャリングに少し問題があります。あなたはhere(1枚目の写真)を見ることができるので、私は3ds maxでモデルを作成し、UVマップを使用しました。私のUVマップがあります。 UVマッピングがなければ、テクスチャの読み込みは「完璧」ですが、UVマップを使って...(2番目の画像here)、ボギーを見てください)。UVマップのOpenGL-ESテクスチャ読み込みの問題

このモデル(ボギー)をobjファイルから読み込むと、コードやobjに問題はありません。単純なテクスチャで作業しているか、loadtextureメソッドが悪い、plsでチェックしている、またはあなたはなにか考えはありますか? あなたの答えをありがとう、私はアイデアがありません。

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

P.S.私の英語のために申し訳ありません。

答えて

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) 

OpenGPでロードマップが少し異なるため、垂直に反転しました。私は、同じ問題を抱えている人に手伝ってくれることを願っています。