6

OpenGL を使用して独自の 2D GUI ライブラリをプログラミングしていますが、グラフィック要素(角丸四角形や星形など)やその他の子コントロールを含むことができるコンテナー コントロールを作成する段階にいます。子コントロールとグラフィック要素のレンダリングを親コントロールにクリップします。そのため、子コントロールがコンテナーの境界線からはみ出すと、レンダリングされません。

私が最初に思いついたのは、ウェブを検索しているときに「はさみテスト」を見つけた後、それを使用することでした。しかし、問題は、私は長方形のクリッピングに制約されており、星形の多角形のような任意の領域でコンテンツをクリッピングできるようにしたいということです。

考えがある...

コントロールとそのグラフィック要素を描画するときは、コントロールがコンテンツをクリップする必要があるかどうかを確認します。はいの場合は、オフスクリーン テクスチャの黒の背景に均一な白で描画します。次に、シェーダー プログラムに送信します。そのため、シェーダーをアクティブにして各子(コントロールとグラフィックス要素)をレンダリングします。このフラグメント シェーダーでは、フラグメントごとに、先ほど渡された特別なテクスチャで同じ座標を見て考えます。特殊なテクスチャのフラグメントが白の場合、このフラグメントは可視領域にあるためレンダリングできます。

うまくいくと思いますか?それは良い考えですか、それとももっと良い考えがありますか?

4

1 に答える 1

2

必要に応じて、いくつかの方法で実行できます。テクスチャまたはステンシル バッファにレンダリングするのがおそらく最善の方法です。このリンクには、開始するための詳細情報が含まれています。

OpenGL クリッピング

于 2012-10-23T16:10:36.387 に答える