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

Aktuelle Zeit: Mo Apr 29, 2024 00:01

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Tesselations-Shader & Textur
BeitragVerfasst: Mi Aug 23, 2023 12:47 
Offline
DGL Member
Benutzeravatar

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

_________________
OpenGL
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tesselations-Shader & Textur
BeitragVerfasst: Do Aug 24, 2023 11:11 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Bist du sicher, dass du die Heigthmap richtig übergibst?

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tesselations-Shader & Textur
BeitragVerfasst: Do Aug 24, 2023 14:47 
Offline
DGL Member
Benutzeravatar

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

_________________
OpenGL
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Tesselations-Shader & Textur
BeitragVerfasst: So Aug 27, 2023 15:00 
Offline
DGL Member
Benutzeravatar

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

_________________
OpenGL


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.036s | 21 Queries | GZIP : On ]