DGL
https://delphigl.com/forum/

Tesselations-Shader & Textur
https://delphigl.com/forum/viewtopic.php?f=20&t=11741
Seite 1 von 1

Autor:  mathias [ Mi Aug 23, 2023 12:47 ]
Betreff des Beitrags:  Tesselations-Shader & Textur

Ich will eine kleine Verschiebung der Z-Achse, welches durch die Textur bestimmt ist.
Nur wird meine Mesh auf der ganzen Fläche verschoben, anstelle der einzelnen Pixel in der Textur.

Was mache ich falsch ?
Ich denke, dies ist ein banaler Fehler im Tesselations-Shader.

Vertex-Shader:
Code:
  1. #version 400
  2.  
  3. layout (location = 0) in vec3 inPos; // Vertex-Koordinaten
  4. layout (location = 1) in vec2 inTex; // Textur-Koordinaten
  5.  
  6. out vec2 TexCoord;
  7.  
  8. void main(void) {
  9.   gl_Position = vec4(inPos, 1.0);
  10.   TexCoord = inTex; }


Tesselations-Shader:
Code:
  1. #version 400
  2.  
  3. layout(triangles) in;
  4.  
  5. uniform mat4 Matrix;                
  6. uniform sampler2D heightMap;
  7.  
  8. out vec3 color;
  9.  
  10. in vec2 TexCoord[];
  11.  
  12. void main() {
  13.   gl_Position = (gl_TessCoord.x * gl_in[0].gl_Position) +
  14.                 (gl_TessCoord.y * gl_in[1].gl_Position) +
  15.                 (gl_TessCoord.z * gl_in[2].gl_Position);
  16.  
  17.   vec2 tex  = (gl_TessCoord.x * TexCoord[0]) +
  18.               (gl_TessCoord.y * TexCoord[1]) +
  19.               (gl_TessCoord.z * TexCoord[2]);
  20.  
  21.   float Height = texture(heightMap, tex).r;
  22.  
  23.  gl_Position.z += Height;
  24.  
  25.  gl_Position = Matrix * gl_Position;
  26.  
  27.   color = gl_TessCoord; }


Fragment-Shader:
Code:
  1. #version 400
  2.  
  3. out vec4 outColor;  // Ausgegebene Farbe.
  4.  
  5. in vec3 color;
  6.  
  7. void main(void) {
  8.   outColor = vec4(color, 1.0); }


Leider finde ich kein Tutorial, bei dem es einfach erklärt wird.
Einzig was ich gefunden habe, ist dies hier:
https://learnopengl.com/Guest-Articles/ ... ssellation
Aber das ist schon sehr komplex um es zu verstehen. Und leider findet man auch die komplette-Sourcen, inklusive der Textur-Datei dazu nicht.

Die viele Dreiecke werden folgendermassen im Shader erzeugt.
Code:
  1. const
  2.   cnt=16;
  3.   outer_levels: array of GLfloat = (cnt, cnt, cnt,cnt);
  4.   inner_levels: array of GLfloat = (cnt,cnt);
  5. begin
  6.   glPatchParameterfv(GL_PATCH_DEFAULT_OUTER_LEVEL, PGLfloat(outer_levels));
  7.   glPatchParameterfv(GL_PATCH_DEFAULT_INNER_LEVEL, PGLfloat(inner_levels));
  8.  


Dateianhänge:
Bildschirmfoto vom 2023-08-23 13-41-25.png
Bildschirmfoto vom 2023-08-23 13-41-25.png [ 17.23 KiB | 2369-mal betrachtet ]

Autor:  i0n0s [ Do Aug 24, 2023 11:11 ]
Betreff des Beitrags:  Re: Tesselations-Shader & Textur

Bist du sicher, dass du die Heigthmap richtig übergibst?

Autor:  mathias [ Do Aug 24, 2023 14:47 ]
Betreff des Beitrags:  Re: Tesselations-Shader & Textur

Ich bin ein Schritt weiter gekommen.
Ich hatte ein
Code:
  1.   glEnableVertexAttribArray(1);
  2.  
vegessen. Daher hatte die Textur auch falsche Koordinaten.
Manchmal sucht man am falschen Ort.

Jetzt habe ich schon mal folgendes hingekriegt.

Dateianhänge:
Bildschirmfoto vom 2023-08-24 15-45-47.png
Bildschirmfoto vom 2023-08-24 15-45-47.png [ 10.64 KiB | 2362-mal betrachtet ]

Autor:  mathias [ So Aug 27, 2023 15:00 ]
Betreff des Beitrags:  Re: Tesselations-Shader & Textur

Es hat doch noch einen Fehler, es gibt Cliping-Fehler.
Da habe ich gemerkt, das ich die Tiefenprüfung gar nicht eingeschaltet habe.

Jetzt wollte ich diese folgendermassen einschalten.
Code:
  1. glEnable(GL_DEPTH_TEST)

Nur dann verschwindet die Mesh ganz.
Muss man da bei Tesselation auf etwas spezielles achten ?

Nachtrag:
Fehler gefunden, folgendes muss noch rein.
Code:
  1.   glClear(GL_COLOR_BUFFER_BIT);  // alt
  2.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);  // neu

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