1

次のシーンを考えてみましょう。 シーン

pMin と pMax をワールド空間からビューポート空間に変換しました。pMin と pMax で区切られた領域は、ユーザーのマウスが平面 (大きな長方形) 上をスライドするのに従います。

フラグメント シェーダー内で、フラグメントが内部領域内にあるかどうかを判断する方法はありますか? gl_FragCoord.x と gl_FragCoord.z を比較してみましたが、正しい結果が得られません。

if((gl_FragCoord.x < splitMax.x && gl_FragCoord.x > splitMin.x) 
&& (gl_FragCoord.z < splitMax.z && gl_FragCoord.z > splitMin.z)){
    //within area following the mouse
} else {
   //outside of area following the mouse
}

カスケード シャドウ マッピングでは、フラグメントの z 値と、計算されたフラスタム スプリットの z 値の内側にあるかどうかに基づいて、シャドウ マップが選択されます。ルックアップでx座標も考慮したいということだけを同じようにしようとしています。

4

1 に答える 1

2

freenode の ##opengl の人のおかげで、次の方法でこれを機能させることができました。

vertex shader : 入力頂点をワールド空間に変換します

out vec4 worldPos;
...
worldPos = modelMatrix * vec4(vertex, 1.0);

fragment shader : ワールド空間座標で pMin と pMax を送信

in vec3 pMin, pMax;
in vec4 worldPos;
...
if((worldPos.x > pMin.x && worldPos.x < pMax.x) && (worldPos.z > pMin.z && worldPos.z < pMax.z)){
   FragColor = vec4(1.0, 0.0, 0.0, 1.0);
} else {
   FragColor is scene lighting
}

結果: 結果

于 2013-12-29T13:01:24.697 に答える