OpenGL Clip Planes
← GL Backface Beispiel | ● | GL Tesselierung →
Ebenengleichung der Clip-Ebene:
n⋅(p−v)=0 → ax+by+cz+d=0.
Berechnung der Distanz eines Punktes (x, y, z, w) von einer Ebene (a, b, c, d) mittels Skalarprodukt:
clip_distance=[x,y,z,w]⋅[a,b,c,d].
Dadurch kann die Geometrie an der Ebene abgeschnitten werden, so dass nur die Hälfte des Raums gezeichnet wird, in welchen die Normale zeigt.
Bis OpenGL Version 3.0 wurden mindestens 6 Clipebenen durch die Grafikhardware unterstützt
glClipPlane(GL_CLIP_PLANE0+n,equ);
glEnable(GL_CLIP_PLANE0+n);
Die obige Variante ist seit OpenGL 3.0 deprecated und wurde ab OpenGL 3.1 entfernt. Clip Planes werden nun zum Beispiel in Shadern implementiert:
#version 120
attribute vec4 vertex_position;
uniform mat4 mvp;
vec4 plane = vec4(a, b, c, d);
varying float clipdist;
void main()
{
gl_Position = mvp * vertex_position;
clipdist = dot(plane, vertex_position);
}
//FRAGMENT SHADER
#version 120
uniform vec4 color;
varying float clipdist;
void main()
{
vec4 col = clipdist * color;
gl_FragColor = col;
if(clipdist < 0)
{
discard;
}
}
Das Ergebnis sieht dann wie folgt aus:

Implementierung von Clip Planes im Shader
← GL Backface Beispiel | ● | GL Tesselierung →