1

OpenGL メソッド glTexImage2D()の仕様internalFormatは、受け入れられるパラメーターの大きな表を提供します。ドキュメントが言うので、このパラメータを何に設定するかが本当に重要かどうか疑問に思っています

アプリケーションが特定の解像度または特定の形式でテクスチャを保存する必要がある場合、internalFormat を使用して解像度と形式を要求できます。GL は、internalFormat によって要求されたものに非常に近い内部表現を選択しますが、正確には一致しない場合があります。

とにかく、OpenGLが必要なものを選択するだけのように見えます。画像のビット深度を取得して、またはのinternalFormatようなものに設定する必要がありますGL_RGBA8GL_RGBA16? 私が見たすべてのコード例はGL_RGBA...

4

2 に答える 2

2

とにかく、OpenGLが必要なものを選択するだけのように見えます。

これは非常に誤解を招きます。

実装が多かれ少なかれ正確に説明されているようにサポートする必要がある多くの形式があります。実際、実装はそれらをより大きなストレージに格納することが許可されています。しかし、それらに比べて精度を落とすことは許されません。そして、それらを使用することには利点があります (正確に何が得られるかについての明白な知識に加えて)。

まず、 GL_RGB10_A2 のような特殊なフォーマットを使用できます。これは、特定の状況で便利です (遅延レンダリングのための線形カラー値の保存など)。第 2 に、FBO はイメージ フォーマットの任意の組み合わせをサポートする必要がありますが、それらのイメージ フォーマットのすべてがテクスチャ/レンダ バッファに必要なカラー フォーマットのリストに含まれている場合に限られます (テクスチャのみではありません)。の内部形式を使用している場合、FBO がGL_FRAMEBUFFER_UNSUPPORTEDあなたを攻撃する可能性があります。

第 3 に、不変のテクスチャ ストレージ関数 では、サイズ設定された内部フォーマットを使用する必要があります。そして、利用可能なときはいつでもそれらを使用する必要があります。

一般に、常にサイズ設定された内部形式を使用する必要があります。一般的なものを使用する理由はありません。

于 2013-03-05T03:18:51.323 に答える
0

一般的な内部形式 OpenGL を使用すると、最も「好き」なものが選択され、気にしないことが伝えられます。明示的な内部形式を使用すると、実際に内部表現を気にすることを OpenGL に伝えます (ほとんどの場合、精度が必要なためです)。正確に一致させることができない場合、実装は自由にアップグレードまたはダウングレードできますが、通常のフォールバックは、要求された要求を満たすことができる次に高い形式の精度にアップグレードすることです。

画像のビット深度を取得して internalFormat を設定する必要がありますか

絶対に精度が必要な場合は、はい。パフォーマンスに関する懸念がある場合は、特定の形式が要求されていない場合、OpenGL 実装の通常のデフォルトとして、最高のパフォーマンスを得るために内部形式を選択する必要はありません。

于 2013-03-05T02:57:08.480 に答える