K
Also die Aufgabe hat sich jetzt ein wenig geändert,
ich soll nur auf jedenfall GLSL nutzen.
Und nun soll ich nur ein beliebiges Objekt clippen können und "hinter" der clipping ebene noch was zeichnen.
Also rein prinzipiel sowas wie
aktiviere ClippingEbene
zeichne Objekt
deaktiviere ClippingEbene
zeiche Objekt welches nicht mehr geclippt wird
Also etwas einfach nur zu clippen mit Shadern hab ich hinbekommen
Vertex-Shader:
varying vec3 lightDir,normal;
varying float clipDist;
void main()
{
normal = normalize(gl_NormalMatrix * gl_Normal);
lightDir = normalize(vec3(gl_LightSource[0].position));
gl_TexCoord[0] = gl_MultiTexCoord0;
vec4 myClipPlane = vec4(0.0,0.0,1.0,0.0);
clipDist = dot(gl_Vertex.xyz, myClipPlane.xyz) + myClipPlane.w;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Fragment-Shader:
varying vec3 lightDir,normal;
uniform sampler2D tex, tex2;
varying float clipDist;
void main()
{
float epsilon = 0.1;
if(clipDist < 0.0)
discard;
else if(clipDist > 0.0 && clipDist < epsilon)
gl_FragColor = vec4(1.0,1.0,1.0,1.0);
else
{
vec3 ct,cf;
vec4 texel;
float intensity,at,af;
intensity = max(dot(lightDir,normal),0.0);
cf = intensity * (gl_FrontMaterial.diffuse).rgb + gl_FrontMaterial.ambient.rgb;
af = gl_FrontMaterial.diffuse.a;
texel = texture2D(tex,gl_TexCoord[0].st) + texture2D(tex2,gl_TexCoord[0].st);
ct = texel.rgb;
at = texel.a;
gl_FragColor = vec4(ct * cf, at * af);
}
}
Hat jemand ne Idee wie ich das bewerkstelligen kann mit dem Objekt "hinter" der Ebene ?
mfg
Edit: Wäre es vllt eine Idee einfach noch 2 zusätzlicher Shader zu benutzen die nur für die ungeclippten Objekte zuständig sind ?