gl_ClipDistance
アレイには、各頂点について、概念的な「平面」のどちら側にあるかを表す一連の浮動小数点値が含まれています。各配列インデックスは、概念的な「平面」です。頂点は、負側または非負側のいずれかにすることができます。
同じライン/トライアングルの2つの頂点が平面の2つの異なる側にある場合(つまり、1つの頂点が負の値を持ち、もう1つの頂点が負でない場合)、そのプリミティブはその位置でクリップされますその距離は0です。非負側のプリミティブの部分が表示されます。
あなたがする必要があるのは、頂点位置とクリップしたい面との間の距離を表すクリップ距離値を設定することです。標準平面方程式(Ax + By + Cz + D = 0)は、これを処理する方法を提供します。ベクターを想定平面A、B、C、D、(A、B、C)からの点の距離が単位ベクトルであり、単純である:
dot(point, vec3(A, B, C)) + D
これもpoint
が同じであると仮定しもちろんA、B、C及びDとスペース
、point
は1.0として最後のコンポーネントで、vec4
であれば、あなたはちょうどこの行うことができます:plane
はそのvec4
ある
dot(point, plane);
をA、B、C、Dを含んでいますあなたのクリップの距離。
gl_ClipDistance
は、それを使用するシェーダステージで明示的なサイズで再宣言する必要があります。 GLSL 3.20+では、gl_ClipDistance
はインターフェイスブロック内に存在するため、再宣言する必要があります。
out gl_PerVertex
{
vec4 gl_Position;
float gl_ClipDistance[1];
};