これを達成するために、いくつかの方法は、あなたがこのようなscissor testing使用することができ、単純な長方形の穴のため、ありますにディスクを描き、あなたはステンシルバッファを使用することができ、円形の切り欠き部について
gl.enable(gl.SCISSOR_TEST);
gl.scissor(0,gl.canvas.clientHeight-256,256,256);
// draw track here
gl.disable(gl.SCISSOR_TEST);
をステンシルバッファを有効にし、ステンシルを有効にしてトラックを描画する必要がありますが、ステンシルバッファが付いたフレームバッファを使用してレンダリングパイプラインをセットアップする必要があります。その後、フラグメントシェーダでは、前述のように
カスタムフラグメントシェーダを使用し、前述のはさみRECTと組み合わせて配合するには、ここで最も賢明な解決策、セットアップあなたのはさみのように思える:私たちがしているもの
void main(void) {
// do what you need to do to get the final color
gl_FragColor.rgb = finalColor;
gl_FragColor.a = smoothstep(128.,100.,length(min(vec2(gl_FragCoord.x,resolution.y-gl_FragCoord.y),256.)-128.));
}
ここでは、現在のピクセルとシザー領域の中心との距離を計算します(スクリーンの左上隅の256x256と仮定します)。次に100と128の間の線形フェードアウトを実行します。 結果は次のようなマスクです:
技術的には、フラグメントシェイダーのマスクが円形領域外のすべてをマスクするため、技術的にはシザーテストは必要ありません。しかし、はさみテストを維持することで、必要なところでフラグメントシェーダの作業を行うだけです。
ありがとうございました!それは完璧に機能し、優れた説明もありました。 – Craigo