Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Mär 28, 2024 19:29

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Pixelpos im Fragmentshader ermitteln
BeitragVerfasst: Mo Dez 25, 2017 18:15 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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;}

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Dez 26, 2017 18:58 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Dez 26, 2017 19:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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 | 9217-mal betrachtet ]

_________________
OpenGL
Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Dez 26, 2017 19:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
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.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Dez 26, 2017 19:55 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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 ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Dez 26, 2017 20:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
a = z (gl_FragDepth), z = 1/w

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.081s | 19 Queries | GZIP : On ]