パースペクティブ補正を使用してラスタライザーによって補間されるすべての可変頂点値(または頂点シェーダーから「外れる」glsl 値の新しいバージョン)ですか? これはハードウェアに依存していますか?
クリッピングが発生した場合、クリッピング頂点の値はどのように計算されますか?
パースペクティブ補正を元に戻そうとすると、クリップされたポリゴンの奇妙な動作に気付きました。舞台裏で何が起こっているのかをよりよく理解したいと思っています。
パースペクティブ補正を使用してラスタライザーによって補間されるすべての可変頂点値(または頂点シェーダーから「外れる」glsl 値の新しいバージョン)ですか? これはハードウェアに依存していますか?
クリッピングが発生した場合、クリッピング頂点の値はどのように計算されますか?
パースペクティブ補正を元に戻そうとすると、クリップされたポリゴンの奇妙な動作に気付きました。舞台裏で何が起こっているのかをよりよく理解したいと思っています。
GL 3.0 より前のバージョンでは、パースペクティブ補正補間に影響を与える唯一の方法は、ヒントを使用することです。一般に、glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
すべての変化に対してパースペクティブ補正補間を有効にしますglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST)
が、通常は無効にします。これらはドライバーのヒントであり、それ以上のものではないことに注意してください。ドライバーはこのように反応する必要はありません。
GLSL 1.30+ (OpenGL 3.0+) では、各出力/入力を強制的に特定の方法で補間することができます。補間修飾子 は、smooth
パースペクティブ補正を意味します。修飾子を指定しない場合、これがデフォルトです。noperspective
意味は... 明らかです。
クリッピングは常に、あたかもクリッピングされていないかのように (またはハードウェアの精度に十分近い) 動作するように行われます。したがって、値が遠近法で正しく補間される場合、クリップされた頂点に対して生成される値も遠近法で正しい補間を使用する必要があります。