2011-01-29 17 views
2

RGB(またはRGBA)テクスチャイメージのバッファがあり、Androidデバイスに次のコードで表示したいとします。私はNDKからOpenGLを使用しています。OpenGL ESテクスチャの問題、4列と水平線の重複(Android)

glTexImage2D(GL_TEXTURE_2D, 
      0, 
      GL_RGBA, 
      256, 
      256, 
      0, 
      GL_RGBA, 
      GL_UNSIGNED_BYTE, 
      this->pBuffer); 

は私も持つJava側からPixelFormatプロパティを設定している:

this.getHolder().setFormat(PixelFormat.RGBA_8888); 
this.setEGLConfigChooser(8, 8, 8, 8, 0, 0); 
setRenderer(new MyRenderer()); 

画像が表示されているが、4つの列がある(同一では、元画像の認識部分を含む)の水平あります画像の上にすべての線が表示されます。

何が問題なのですか?

オリジナル画像:それは私のコードでどのように見えるか

Original Image

How it looks with my code

答えて

2

これは、画像サイズは256 256ではないように見えますが、多分約150ピクセルの幅。あなたの質感は、大きな2のべき乗である必要がありますが、あなたは、あなたがglTexSubImage2Dを使用することができます小さいテクスチャをアップロードする必要がある場合:

glTexSubImage2D(GL_TEXTURE_2D, /* target */ 
      0,  /* level */ 
      0,  /* xoffset */ 
      0,  /* yoffset */ 
      150,  /* width */ 
      256,  /* height */ 
      GL_RGBA, /* format */ 
      GL_UNSIGNED_BYTE, /* type */ 
      this->pBuffer); /* data */ 

初期glTexImage2D呼び出しでは、だけではなく、ピクセルバッファのNULLを渡すことを。このようなものを試してみてください。

あなたは小さいテクスチャ使用GL_TEXTURE_CROP_RECT_OESをトリミングした後、テクスチャを描画するglDrawTexiOESを使用している場合:

int rect[4] = {0, imageHeight, imageWidth, -imageHeight}; 
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect); 
glDrawTexiOES(0, 0, 0, windowWidth, windowHeight); 
+0

おかげで、これは多くのことを助けました。私は画像を正しく表示することができました。しかし、画像はディスプレイの幅に合わせて拡大されません。 glDrawTexiOES(0、0、0、windowWidth、windowHeight)を使用します。これは正しい方法ですか? –

+0

@Ertan D.私は詳細情報で答えを編集しましたが、あなたのウィンドウ領域が256x256で、画像が同じアスペクト比(1:1)でない場合、「間違っている」ように見えるかもしれません。画像のアスペクト比、または別の方法でクリップする(例えば、ある高さよりも画像の一部が失われる) – richq

+0

これは素晴らしいことです。ありがとうございます!実際の画像サイズではなく、GL_TEXTURE_CROP_RECT_OESをテクスチャサイズに設定していました。それが私の問題でした。今、私はそれが欲しいのとまったく同じように働いています。 –

関連する問題