Ok....
Das mit dem gl_ClipVertex ist ja schön und gut, allerdings bringt mich das nicht wirklich weiter. Ich weiss jetzt nicht, wie ich gl_Vertex transformieren muss, damit das Ergebnis einigermaßen ok wird. Ich habe mir schon per Uniform die ModelView-Matrix übergeben, die zu dem Zeitpunkt des erstellens der ClipPlane galt und gl_Vertex damit multipliziert und an gl_ClipVertex übergeben. Das Ergebnis war, dass das Objekt an einer Ebene abgeschnitten wurde, die 90° gedreht war zu der, an der es abgeschnitten werden sollte...
So siehts in meinem Vertex-Shader aus:
Code: varying vec4 vpos; varying vec4 cmpos; varying vec4 cpos; uniform mat4 cm; void main(void) { vpos = gl_Vertex; cmpos = gl_Vertex * cm; cpos = gl_ModelViewMatrix * gl_Vertex; gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_TexCoord[0] = gl_MultiTexCoord0; gl_FrontColor = gl_Color; gl_ClipVertex = cmpos; }
cm ist die übergebene Matrix.
//Edit: möglicherweise habe ich die Matrix falsch übergeben:
Alter Aufruf:
Code: glUniformMatrix4fv(DepthShader.GetUniformLocationARB('cm'), 1, False, @CM);
Neuer Aufruf:
Code: glUniformMatrix4fv(DepthShader.GetUniformLocationARB('cm'), 16, False, @CM);
Jetzt wird garnichts mehr geclippt... Was ist richtig?
Gruß Lord Horazont
|