DGL
https://delphigl.com/forum/

Fragmentshader färbt alles schwarz...
https://delphigl.com/forum/viewtopic.php?f=20&t=3770
Seite 1 von 1

Autor:  La Boda [ Mo Feb 07, 2005 18:35 ]
Betreff des Beitrags:  Fragmentshader färbt alles schwarz...

Ich schlage mich gerade mit einem sehr merkwürdigen Problem herum. Nachdem mit Lars bei meinem Verständnissproblem sehr helfen konnte, hapert es jetzt bei der Umsetzung.
Meine Shader schauen jetzt folgendermaßen aus:
Vertexshader:
Code:
  1. varying vec3 normal;
  2. varying vec3 v;
  3. varying vec3 lightvec;
  4.  
  5. void main(void)
  6. {
  7.   normal          = normalize(gl_NormalMatrix * gl_Normal);
  8.   v               = vec3(gl_ModelViewMatrix * gl_Vertex);
  9.   lightvec        = normalize(gl_LightSource[0].position.xyz - v);
  10.  
  11.   gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
  12. }


Fragmentshader:
Code:
  1.  
  2. varying vec3 normal;
  3. varying vec3 v;
  4. varying vec3 lightvec;
  5.  
  6. void main(void)
  7. {
  8.  vec3 view            = normalize(-v);
  9.  vec3 HalfVector      = normalize((lightvec + view)/2);
  10.  
  11.  vec4 IAmbient        = gl_LightSource[0].ambient;
  12.  vec4 IDiffuse        = gl_LightSource[0].diffuse * max(dot(lightvec, normal), 0);
  13.  
  14.  vec4 ISpecular       = gl_LightSource[0].specular * pow(max(dot(normal, HalfVector), 0), 0.3             *gl_FrontMaterial.shininess);
  15.  
  16.  gl_FragColor = gl_FrontLightModelProduct.sceneColor + IAmbient + IDiffuse + ISpecular;
  17.  //gl_FragColor.xy = 1;                     // Diese Zeile nur zu Testzwecken
  18. }


Wenn ich das ganze so laufen lasse, dann erhalte ich meine Objekte ganz schwarz. Durch rumprobieren hab ich heraus- gefunden, dass wenn ich die letzt (auskommentierte) Zeile arbeiten lasse, die ja völlig vom Rest unabhägig ist, auch alles schwarz bleibt. Durch noch mehr rumprobieren bin ich dann darauf gekommen, das die letzte Zeile ihren banalen Sinn nur erfüllt, wenn ich vorher alle Zeilen auskommentiere, die eine Berechnung enthalten (vec4 IAmbient = gl_LightSource[0].ambient; kann ich so stehen lassen). *amkopfkratz* irgendwie hat es mir den Anschein, das sobald der Shader ne Berechnung anstellen muss, er einfach komplett abgeschaltet wird. Sollte noch sagen, dass es mit Standard-OGL-Licht wunderbar funzt, an den Lichteinstellungen selber kanns dann ned liegen.
So schauts dann immer aus:

Bild

Autor:  La Boda [ Di Feb 08, 2005 13:11 ]
Betreff des Beitrags: 

Sorry, aber ich hab mir jetzt selber ( bzw. Corrail, der das Shader-Tutorial von NeHe verfasst hat) geholfen.
Und, wie so oft bei mir hats an was ganz anderem gelegen. Ich habe Fragment- und Vertex-Shader als komplett unabhängige Einheiten angesehen und deswegen auch getrennt kompiliert und gelinkt. Da hätte ich mich besser an den Tutorials halten sollen. Nachjdem ich das geändert habe, funzts eigentlich jetzt optimal. Es war einfach so, dass der Fragmentshader nix berechnen konnte, da er den Vertex-Shader (und dessen Werte) überhaupt nicht "kennt".

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