DGL
https://delphigl.com/forum/

Pixelpos im Fragmentshader ermitteln
https://delphigl.com/forum/viewtopic.php?f=20&t=11621
Seite 1 von 1

Autor:  mathias [ Mo Dez 25, 2017 18:15 ]
Betreff des Beitrags:  Pixelpos im Fragmentshader ermitteln

Ich code gerade ein Schachbrettmuster auf der Mesh.
Dies funktioniert fast wie erwartet, ausser, das Muster ein wenig zittert.
Die Position des zu zeichnenden Pixel ermittle ich über eine Umweg über PosXY.
Gibt es eine Möglichkeit, die direkt im Fragmentshader zu ermitteln ?
Ich habe dies mal mit gl_FragCoord.xy probiert, aber dies ist wohl etwas anderes.

Fragmentshader:
Code:
  1. #version 330
  2. #define size 0.1
  3.  
  4. in vec2 PosXY;
  5.  
  6. out vec4 outColor;   // ausgegebene Farbe
  7.  
  8. void main(void)
  9. {
  10.   vec2 p = mod(PosXY.xy, 0.2);
  11. //  vec2 p = mod(gl_FragCoord.xy, 0.2);
  12.   if (((p.x > size) && (p.y > size)) || ((p.x < size) && (p.y < size))) {
  13.     outColor = vec4(1.0, 0.0, 0.0, 1.0);
  14.   } else {
  15.     outColor = vec4(0.0, 0.0, 1.0, 1.0);
  16.   };
  17. }


Vertexshader:
Code:
  1. #version 330
  2.  
  3. layout (location = 10) in vec3 inPos;    // Vertex-Koordinaten
  4. uniform mat4 mat;                        // Matrix von Uniform
  5.  
  6. out vec2 PosXY;
  7.  
  8. void main(void) {
  9.   vec4 p = mat * vec4(inPos, 1.0);  // Vektoren mit der Matrix multiplizieren.
  10.   PosXY = p.xy;
  11.   gl_Position = p;}

Autor:  Sascha Willems [ Di Dez 26, 2017 18:58 ]
Betreff des Beitrags:  Re: Pixelpos im Fragmentshader ermitteln

Aus der Beschreibung zwar etwas schwer zu erkennen, aber ich vermute du willst die Position des Fragments in Bildschirmkoordinaten? Wenn ja, dann ist gl_FragCoord der richtige Ansatz.

Autor:  mathias [ Di Dez 26, 2017 19:39 ]
Betreff des Beitrags:  Re: Pixelpos im Fragmentshader ermitteln

Zitat:
Wenn ja, dann ist gl_FragCoord schon der richtige Ansatz.

Wen dies gehen würde, dann hätte ich doch einen Farbverlauf, oder täusche ich mich da ?
Wieso ist die Mesh hellgelb ?
Code:
  1.  
  2. // Fragmentshader
  3. #version 330
  4. out vec4 outColor;   // ausgegebene Farbe  
  5.  
  6. void main(void)
  7. {
  8.   outColor = gl_FragCoord;
  9.   outColor.a = 1.0;
  10. }


Dateianhänge:
Bildschirmfoto vom 2017-12-26 19-36-57.png
Bildschirmfoto vom 2017-12-26 19-36-57.png [ 3.66 KiB | 9356-mal betrachtet ]

Autor:  Sascha Willems [ Di Dez 26, 2017 19:47 ]
Betreff des Beitrags:  Re: Pixelpos im Fragmentshader ermitteln

Sry, gl_FragCoord enthält bereits die DC, d.h. für NDC musst du durch die Dimensionen des Viewports teilen. Dann bekommst du auch nen Farbverlauf.

Autor:  mathias [ Di Dez 26, 2017 19:55 ]
Betreff des Beitrags:  Re: Pixelpos im Fragmentshader ermitteln

Code:
  1.   outColor = gl_FragCoord / 1024;
  2.   outColor.a = 1.0;  

So habe ich den Farbverlauf.
Ich wollte eigentlich den Bereich von -1.0 - 1.0, unabhängig der Auflösung,
Somit komme ich nicht um PosXY herum, ausser ich übergebe bei onResize die Grösse mit einer Uniform-Variable.

Was enthält gl_FragCoord.a und gl_FragCoord.z ?

Autor:  Sascha Willems [ Di Dez 26, 2017 20:01 ]
Betreff des Beitrags:  Re: Pixelpos im Fragmentshader ermitteln

a = z (gl_FragDepth), z = 1/w

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