2011-11-12 9 views
0

テクスチャマッピングの概念を理解しようとしています。テクスチャを正方形(2つの三角形で構成)にマップしようとしました。しかし、画像の左上のピクセルだけが正方形に完全にレンダリングされます。なぜこれが起こるのですか?Android上のOpenGL - テクスチャマッピング - 画面上の左上のピクセルのみが表示される

private float[] _vertices = {0.0f, 0.0f,0.0f, 1.0f, 
          60.0f, 0.0f, 0.0f, 1.0f, 
          0.0f, 60.0f, 0.0f, 1.0f, 
          60.0f, 60.0f, 0.0f, 1.0f}; 

テクスチャCOORDS - -

private float _texCoords[] = {0.0f, 1.0f, 
    1.0f, 1.0f, 
    0.0f, 0.0f, 
    1.0f, 0.0f }; 

私は私のために同じ問題..しかし、そのソリューションdoesntの仕事とanother post

初期セットアップ

gl.glDisable(GL10.GL_DITHER);    //Disable dithering (NEW) 
    gl.glEnable(GL10.GL_TEXTURE_2D);   //Enable Texture Mapping 
    gl.glShadeModel(GL10.GL_SMOOTH);   //Enable Smooth Shading 
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //Black Background 
    gl.glClearDepthf(1.0f);      //Depth Buffer Setup 
    gl.glEnable(GL10.GL_DEPTH_TEST);   //Enables Depth Testing 
    gl.glDepthFunc(GL10.GL_LEQUAL);    //The Type Of Depth Testing To Do 

頂点COORDSを見てきましたテクスチャ読み込みメソッド -

public void loadGLTexture(GL10 gl, Context context) { 
    //Get the texture from the Android resource directory 
    InputStream is = context.getResources().openRawResource(com.mhoapps.bugswatter.R.drawable.crate); 
    Bitmap bitmap = null; 
    try { 
     //BitmapFactory is an Android graphics utility for images 
     bitmap = BitmapFactory.decodeStream(is); 
    } finally { 
     //Always clear and close 
     try { 
      is.close(); 
      is = null; 
     } catch (IOException e) { 
     } 
    } 

    // Generate one texture pointer... 
    gl.glGenTextures(1, _textures, 0); 
    int mTextureId = _textures[0]; 

    // ...and bind it to our array 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureId); 

    // Create Nearest Filtered Texture 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
      GL10.GL_LINEAR); 
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
      GL10.GL_LINEAR); 


    // Use the Android GLUtils to specify a two-dimensional texture image 
    // from our bitmap 
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);  //Clean up 


    bitmap.recycle(); 
} 

最後にdrawメソッド

public void draw(GL10 gl) { 
    //Bind the texture according to the set texture filter 

    //gl.glLoadIdentity(); 
    gl.glTranslatef(0.0f, 0.0f, -3.0f); 



    gl.glEnable(GL10.GL_TEXTURE_COORD_ARRAY); 
    gl.glBindTexture(GL10.GL_TEXTURE_2D, _textures[0]); 

    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glVertexPointer(4, GL10.GL_FLOAT, 0, _currentVertexBuffer); 
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, _bugTexBuffer1); 
    gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); 
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
} 
+0

関連するコードを表示してください。それがなければ私たちは推測することができます。そして、別の投稿に言及するときは、少なくともそれにリンクしてください。 – Bart

+1

[記載された質問](http://stackoverflow.com/questions/7920118/opengl-on-android-texture-mapping-only-top-left-pixel-visible) –

+0

FYI:OpenGLでは、初期設定。特に、そこに設定した状態は、実際に描画関数に設定する必要があります。 – datenwolf

答えて

1

は、あなたのテクスチャ座標を指定していますか?あなたはそうではないように聞こえ、デフォルトでは(0、0)になっています。もう1つの選択肢は、テクスチャマトリックスです。すべてゼロに設定していますか?

+0

上記のコードを追加しました。私はここでテックスコードを設定していると思う。その後、floatbufferに変換します。 –

+0

あなたのポイントは全く正しいです。 glEnableClientState(GL_TEXTURE_COORD_ARRAY)の代わりに、私はglEnable(GL_TEXTURE_COORD_ARRAY)を使用していて、3時間を悲惨に無駄にしました! –

関連する問題