1

テクスチャを作成するときに独自のミップマップを作成しています。GL_LINEAR_MIPMAP_NEAREST(または任意のMIPMAP)を介してミップマップを有効にすると、テクスチャは非常に暗くぼやけた混乱になります。GL_LINEARに切り替えれば大丈夫です。

テクスチャを作成する方法は次のとおりです。

glGenTextures(1, &m_TextureId);
glBindTexture( GL_TEXTURE_2D, id );
int level = 0;

jobject mippedBitmap = srcBitmap;

while (width >= 2 && height >= 2) {
    jniEnv->CallStaticVoidMethod(s_GLUtilsClass, s_texImage2DMethodID,
                     GL_TEXTURE_2D, level, mippedBitmap, 0);

    width >>= 1;
    height >>= 1;
    level++;

    mippedBitmap = createScaledBitmap(jniEnv, srcBitmap, width, height, true);
}

簡潔にするために、すべてのBitmap.recycle()/ NewGlobalRef()呼び出しを省略しました。createScaledBitmap明らかに、Bitmap.createScaledBitmap()へのJNI呼び出しです。

また、ビットマップのフォーマットとタイプを使用する他のバージョンのtexImage2Dも試しました。常にRGBAであることを確認しました。

編集:テクスチャを詳しく説明するために-それらは実際にはほとんど黒です。明るい色のミップでeraseColor()を試しましたが、まだ非常に暗いです。

4

3 に答える 3

2

glGenerateMipmapは、このタスクをより速く、より便利に実行します。

于 2011-02-19T23:54:29.757 に答える
2

表示しているコードは、より低いミップ レベルを生成しないため (たとえば、1x1 が欠落します)、テクスチャは不完全になります。これにより、テクスチャリングがまったく存在しないかのようにレンダリングされます。これがあなたが観察しているものであるかどうかは、あなたの説明からは不明です。

いずれの場合も、ミップマップを 1x1 まで提供する必要があります (正方形でないテクスチャの場合、4x1 -> 2x1 -> 1x1 のように、1 を渡し続けるために、新しいテクスチャ サイズの計算にいくつかの変更が必要です)。

于 2011-02-19T21:09:01.843 に答える
0

Bitmap.createScaledBitmapがガンマを修正しない場合があります。ガンマ補正されたミップマップを作成するコードについては、このスレッドをご覧ください

于 2011-02-19T18:50:59.180 に答える