3

私は 2 乗のサイズのテクスチャ (128x128) を使用しており、その一部をポリゴンに描画しています (テクスチャ アトラスとして使用しています)。私は以下を設定しました:

gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);

ただし、結果はテクスチャがぼやけたままになります。代わりに GL_LINEAR を使用しているようです。

ピクセル化ではなくテクスチャがまだぼやけている理由はありますか?

次に例を示します。

4 つの異なるテクスチャ解像度で描かれた文字

文字Fは画像の一部です。ここでは、128px、256px、512px、および 1024px の画像を使用して描画されています。ご覧のとおり、改善されていますが、1024px でもエッジが少しブレンドされています。128px の画像を使用して、GL_NEAREST を使用して拡大し、エッジをはっきりさせることができるはずです。このように描画される原因は何ですか?

編集

GLES20 を使用するようにアプリを更新しましたが、まだ問題が発生しています。テクスチャをバインドした後、drawArrays を呼び出す前に、GL_NEAREST を使用していることを確認するために、次を使用してみました。

GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);

編集2

アトラスを使用しなくても問題が発生します。クワッドに8px x 8pxのpngを配置しましたが、ぼやけて混乱しました。OpenGL ES 2.0 が GL_NEAREST を使用していない理由はありますか?

結果は次のとおりです。

クワッドに描かれた 8px x 8px の文字 A

4

2 に答える 2

1

glTexParameterf私はあるべきだと信じていますglTexParameteri。フロートではなく、列挙型を最後の引数として渡しています。

glGetError でもエラーをチェックしていますか?

また、線形サンプリングを行いたいテクスチャごとに設定していることを確認してください。その状態はテクスチャごとであり、グローバルではありません。

于 2012-08-01T17:15:11.323 に答える
1

やっとわかった!!!!

それは私が自分のリソースをロードしていた方法でした。

私はこれから変更しました:

Bitmap bitmap = BitmapFactory.decodeResource(GLRenderer.context.getResources(), textureId);

これに:

InputStream is = GLRenderer.context.getResources().openRawResource(textureId);
Bitmap bitmap;
try {
    bitmap = BitmapFactory.decodeStream(is);
} finally {
    try {
        is.close();
    } catch(IOException e) {
        // Ignore.
    }
}
于 2012-08-09T17:04:47.683 に答える