10

定義により、GL_TEXTURE_MIN_FILTERは、テクスチャ化されるピクセルが 1 つのテクスチャ要素よりも大きい領域にマップされる場合に使用されます。

解像度が 1024*768 のテクスチャがあり、それを長方形にマップしたいとします。射影行列は、次を使用して設定されます。

glOrtho(0, 1024, 0, 768, 0, 1);

長方形は次のように設定されます。

glTexCoord2f(0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(1024.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(1024.0f, 768.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, 768.0f, 0.0f);

現在の構成では、長方形の各ピクセルがテクスチャ内の 1 つのピクセルにマップされていると理解しています。

しかし、テストの後、MIN_FILTERがこの構成で機能していることがわかりました。長方形のサイズを 2 倍、つまり 2048*1536 にしても、ビューポートに左下隅だけが表示されていても、機能しているのは MIN_FILTER です。

このような状況では、私の個人的な理解では、ビューポート内の各ピクセルはテクスチャ内の 4 分の 1 ピクセルにのみマップされます。なぜMIN_FILTERがまだ機能しているのでしょうか?

どのフィルターが機能しているかをテストするために、そのフィルターを設定する行をコメントアウトして、結果が間違っているかどうかを確認します。MIN_FILTER設定行をコメントアウトすると、結果は完全に黄色になります。これは、テクスチャの最大レベルをそのレベルと一致するように設定しなかったためです。しかし、 MAG_FILTER行をコメントアウトしても、結果は正しいままです。

4

1 に答える 1

15

私が理解しているように、設定をコメントアウトするGL_TEXTURE_MIN_FILTERと、テクスチャリングが機能しなくなります。このことから、テクスチャリング中に最小フィルターが使用されると結論付けます。そして、まさにこの演説は間違っています。

最小フィルターを設定しないと、魔法のように機能しないだけではありませ。代わりに、デフォルトのGL_NEAREST_MIPMAP_LINEARが使用され、他のミップマップ レイヤーのテクスチャ イメージを指定していないため、機能しません (どうにか自分で推測したように)。しかし、特定のピクセルに最小フィルターが実際に使用された場合にのみ、結果が間違っているわけではありません。テクスチャは不完全であるため (つまり、各ミップマップ レベルに有効な画像がない場合にミップマッピングを使用している)、どのフィルタを使用しても機能しません。したがって、マグフィルタリングでも機能しません。壊れているのはフィルターではなく、テクスチャ全体です。

一方、 にGL_TEXTURE_MAG_FILTERはミップマッピング モードがなく、設定しない場合はデフォルトの が使用されますGL_LINEAR。そのため、mag-filter を設定するかどうかに関係なく、テクスチャは常に完全で機能します。

したがって、特定のフィルターが使用されているかどうかを確認する方法はゴミであり、実装はおそらく理論的に考えたこととまったく同じです。

結論として:

  1. テクスチャ オブジェクトに min フィルタと mag フィルタを設定する必要はありません。そうしないと、デフォルト値が使用されます。しかし、デフォルトでは、min-filter は mipmap を使用し、各 mipmap レベルのイメージを指定する必要があります。そうしないと、特定のフラグメントにどのフィルターが使用されても、テクスチャが不完全になります (つまり、機能しません)。

  2. 各テクスチャ オブジェクトのフィルタ モードを常に明示的に設定し、不確かな既定値に依存しないようにすることをお勧めします。

  3. ピクセルのサイズが正確に (このコンテキストで「正確に」とはどういう意味ですか?) テクセルのサイズと一致する場合、2 つのフィルタリング モードのどちらが使用されているかを判断するのは困難ですが、どちらが使用されているかを確認する簡単な方法はありません。特定のフラグメント用。ただし、とにかくピクセル パーフェクトなテクスチャリングが必要な場合 (ビットマップを 2D 画面に描画する場合など) は、GL_NEAREST最小フィルターと mag フィルターの両方を使用するのがおそらく最良のアイデアであり、どちらのフィルターが実際に使用されているかを考える必要がありません。

于 2012-09-11T09:54:50.473 に答える