2

OpenGLアプリに画像をロードしています。通常は線形フィルタリングを使用していますが、現在最も近いテストを行っているところ、結果の画像が元の画像よりもかなり暗いことがわかりました。例:

線形フィルタリング: 線形フィルタリング

最も近いフィルタリング: 最も近いフィルタリング

元の画像: 元の画像

現在、ミップマップ レベルを (4 に) 設定しています。ミップマップを使用しない場合、元の明るさが損なわれないことがわかりました。何が問題なのですか?それはガンマ補正に関連していますか?

画像の読み込みとミップマップ生成のコードは次のとおりです。

                    ILinfo imageInfo;

        iluGetImageInfo(&imageInfo);
        iluFlipImage();

        if (imageInfo.Format == IL_RGB)
        {
            ilConvertImage(IL_BGRA, IL_UNSIGNED_BYTE);
        }
        else if (imageInfo.Format == IL_RGBA)
        {
            ilConvertImage(IL_BGRA, IL_UNSIGNED_BYTE);

        }

        iluGetImageInfo(&imageInfo);

        glPixelStorei(GL_PACK_ALIGNMENT, 1);
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

        glGenTextures(1, &textureName);
        glBindTexture(GL_TEXTURE_2D, textureName);

        glTexStorage2D(GL_TEXTURE_2D,numMipMapLevels,GL_RGBA8,imageInfo.Width,imageInfo.Height);
        glTexSubImage2D(GL_TEXTURE_2D,0,0,0,imageInfo.Width,imageInfo.Height,GL_BGRA,GL_UNSIGNED_BYTE,imageInfo.Data);

        /* ==================================== */
        // Trilinear filtering by default

        if(smooth){
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glGenerateMipmap(GL_TEXTURE_2D);
        }else{
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        }

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

また、カスタム FBO で MSAA パスを実行していますが、MSAA をオフにしてテストしたところ、同じ問題が解決しないため、問題とは関係がないようです。

4

1 に答える 1