4

パラメータレベル=0でglTexImage2Dを呼び出します。次に、glGenerateMipmap(GL_TEXTURE_2D)を呼び出します。GL_TEXTURE_BASE_LEVELとGL_TEXTURE_MAX_LEVELはどうなりますか?これらは自動的に次のように設定されると思います。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, mipmapsCount - 1);

後で、上記のパラメータを手動で設定して、たとえば最大レベルを下げることができます。そうですか?

4

1 に答える 1

4

ミップマップスタックのGL_TEXTURE_BASE_LEVEL値とGL_TEXTURE_MAX_LEVEL値は、おっしゃるように導き出されます。これらの値は、テクスチャの完全性と呼ばれるものに必要なミップマップレベルの範囲を定義します。を使用してミップマップを自動的に生成するようにOpenGLに要求するglGenerateMipmapと、スタック全体にデータが入力されます。レベル数を指定するために使用する場合glTextureStorage、GL_TEXTURE_MAX_LEVELは、呼び出しで提供される最大レベルより1つ少ないレベルに設定されます。

ミップマップスタックを構築した後に基本レベルと最大レベルを変更できることも正しいですが、OpenGLにミップマップスタックを構築させている場合、それがあまり得られないと思います。これを正しく覚えていれば、ミップマップをロードするときにベースレベルと最大レベルを変更して(レベルglTexImage*パラメータを繰り返し呼び出してインクリメントすることにより)、ミップマップスタック全体をロードする必要がないようにします(これを行うには、テクスチャメモリを節約するか、より高い[つまり、スタック内のより小さなミップマップ]レベルのサンプリングをより適切に制御できるようにします。GL_TEXTURE_MIN_LODおよびGL_TEXTURE_MAX_LODを使用して、テクスチャリングで使用されるミップマップスタックのミップマップを制御することもできます。この理由は、テクスチャリング中にミップマップレベルの非同期ロードを許可するためでした。

于 2013-01-21T01:38:03.877 に答える