シェーダ内で自分でクリッピング面を実装する

(1)
\begin{align} 距離=(A \times P.x)+(B \times P.y)+(C \times P.z)+D \end{align}

この距離が0よりも小さい場合は、その点は平面の後ろにあり、クリッピングされる。
この距離が0以上の場合はクリッピングされない。

uniform vec4 u_clipPlane;
uniform mat4 matViewProjection;
attribute vec4 rm_Vertex;
varying float v_clipDist;
void main(){
//頂点とクリップ面の距離を計算する
v_clipDist=dot(rm_Vertex.xyz,u_clipPlane.xyz)+u_clipPlane.w;
gl_Position=matViewProjection*rm_Vertex;
}
precision mediump float;
varying float v_clipDist;
void main(){
//クリップ面の後ろにあるフラグメントは破棄する
if(v_clipDist<0.0)
discard;
gl_FragColor=vec4(0.5,0.5,1.0,0.0);
}

Bibliography
サポートサイト Wikidot.com