DGL
https://delphigl.com/forum/

ClipPlane im Shader verwenden
https://delphigl.com/forum/viewtopic.php?f=20&t=6580
Seite 1 von 1

Autor:  Lord Horazont [ Sa Mai 12, 2007 15:53 ]
Betreff des Beitrags:  ClipPlane im Shader verwenden

Hallo allerseits

Ich möchte etwas clippen. Das hat auch soweit perfekt geklappt, allerdings musste ich feststellen, dass wenn man einen Shader verwendet, die Standard-Clipping funktionen von OpenGL deaktiviert sind. Ich habe jetzt schon eine weile rumprobiert allerdings habe ich es nicht hinbekommen, die ClipPlane in GLSL zu emulieren. Ich weiss wohl, wie ich auf die einzelnen Clip-Planes zugreife (gl_ClipPlane[0]), allerdings habe ich keine Ahnung, was ich dann mit diesen Koordinaten anstellen soll. Es wäre mir lieb, wenn mir jemand ein komplettes Clipping-Beispiel mit vertex und fragment shader geben könnte oder eine gute erklärung :wink:

Gruß Lord Horazont

Autor:  Sascha Willems [ Sa Mai 12, 2007 16:04 ]
Betreff des Beitrags: 

Wenn du im Vertex-Shader clipping willst musst du in gl_ClipVertex schreiben. Siehe dazu auch das Extension-dokument zu GL_ARB_Vertex_Shader unter Issues und dort dann Punkt 8, da wirds genau beschrieben.

Autor:  Lord Horazont [ Sa Mai 12, 2007 17:42 ]
Betreff des Beitrags: 

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:
  1. varying vec4 vpos;
  2. varying vec4 cmpos;
  3. varying vec4 cpos;
  4. uniform mat4 cm;
  5.  
  6. void main(void)
  7. {
  8.   vpos            = gl_Vertex;
  9.   cmpos = gl_Vertex * cm;
  10.   cpos            = gl_ModelViewMatrix * gl_Vertex;
  11.   gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
  12.   gl_TexCoord[0]  = gl_MultiTexCoord0;
  13.   gl_FrontColor   = gl_Color;
  14.   gl_ClipVertex = cmpos;
  15. }

cm ist die übergebene Matrix.

//Edit: möglicherweise habe ich die Matrix falsch übergeben:
Alter Aufruf:
Code:
  1. glUniformMatrix4fv(DepthShader.GetUniformLocationARB('cm'), 1, False, @CM);

Neuer Aufruf:
Code:
  1. glUniformMatrix4fv(DepthShader.GetUniformLocationARB('cm'), 16, False, @CM);

Jetzt wird garnichts mehr geclippt... Was ist richtig?

Gruß Lord Horazont

Autor:  Pellaeon [ Fr Jun 01, 2007 19:26 ]
Betreff des Beitrags: 

Kennst du das? http://www.gamedev.net/reference/articles/article2138.asp

Und wegen dem Clipping schau mal hier: http://www.terathon.com/code/oblique.php

Hatte vor kurzem auch an nem Wassershader gearbeitet :D

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/