DGL
https://delphigl.com/forum/

[Erledigt] Merkwürdiges Problem
https://delphigl.com/forum/viewtopic.php?f=20&t=8086
Seite 1 von 1

Autor:  Schläfer [ Fr Jan 02, 2009 21:44 ]
Betreff des Beitrags:  [Erledigt] Merkwürdiges Problem

Nachdem ich mich bisher erfolgreich darum gedrückt habe meine Shader für mehr als eine Lichtquelle zu schreiben, habe ich mich heute dann doch dazu entschieden das zu ändern.

Nachdem mein erster Versuch darin endete das die Objekte die den Shader benutzten einfach nurnoch schwarz waren, habe ich versucht den Fehler einzugrenzen.
Allerdings hat das kaum was genützt.
Hier ist mal der Code, bei dem ich schon alles unwichtige rausgelöscht habe, eigentlich besteht er nurnoch aus dem Fehler, dachte ich.

Vertex:
Code:
  1.  
  2. varying vec3 normal;
  3. varying vec3 v;
  4.  
  5. varying vec3 Light_Pos[8];
  6. varying vec4 Light_Ambient[8];
  7. varying vec4 Light_Specular[8];
  8. varying vec4 Light_Diffuse[8];
  9. varying float Light_ConstantAttenuation[8];
  10. varying float Light_LinearAttenuation[8];
  11. varying float Light_QuadraticAttenuation[8];
  12.  
  13. void main(void)
  14. {
  15.     for (int i=0;i<=7;i++)
  16.     {
  17.         Light_Pos[i] = gl_LightSource[i].position.xyz;
  18.         Light_Ambient[i] = gl_LightSource[i].ambient;
  19.         Light_Specular[i] = gl_LightSource[i].specular;
  20.         Light_Diffuse[i] = gl_LightSource[i].diffuse;
  21.         Light_ConstantAttenuation[i] = gl_LightSource[i].constantAttenuation;
  22.         Light_LinearAttenuation[i] = gl_LightSource[i].linearAttenuation;
  23.         Light_QuadraticAttenuation[i] = gl_LightSource[i].quadraticAttenuation;
  24.     }
  25.     normal          = gl_NormalMatrix * gl_Normal;
  26.     v               = vec3(gl_ModelViewMatrix * gl_Vertex);
  27.     gl_FrontColor   = gl_Color;
  28.     gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
  29.     gl_TexCoord[0]  = gl_TextureMatrix[0] * gl_MultiTexCoord0;
  30.     gl_TexCoord[1]  = gl_TextureMatrix[1] * gl_MultiTexCoord1;
  31. }
  32.  


Fragment
Code:
  1.  
  2. varying vec3 normal;
  3. varying vec3 v;
  4.  
  5. varying vec3 Light_Pos[8];
  6. varying vec4 Light_Ambient[8];
  7. varying vec4 Light_Specular[8];
  8. varying vec4 Light_Diffuse[8];
  9. varying float Light_ConstantAttenuation[8];
  10. varying float Light_LinearAttenuation[8];
  11. varying float Light_QuadraticAttenuation[8];
  12.  
  13. void main(void)
  14. {
  15.     normal = normalize(normal);
  16.     vec3 Eye             = normalize(-v);
  17.    
  18.     vec3 new_lightvec;
  19.     float lightdis;
  20.    
  21.     vec4 test = vec4(vec3(0.0),1.0);
  22.     for (int i=0;i<=7;i++)
  23.     {
  24.         //lightdis = length(Light_Pos[i] - v); 
  25.         //new_lightvec = normalize(Light_Pos[i] - v);
  26.         test = test + (Light_Diffuse[i] * gl_FrontMaterial.diffuse);
  27.     }
  28.     gl_FragColor = test;
  29. }
  30.  


Das Problem ist nun, dass wenn ich beide auskommentierte Zeilen "entkommentiere" so ziemlich garnichts funktioniert. Das heißt: Es kommt keine Fehlermeldung beim Laden, aber es wird auch kein Bild mehr gezeichnet. Es wird nur das leere Formular gezeigt.
Wenn ich nur eine der Zeilen auskommentiere, die auch garnichts mit dem Programm zu tun haben, funktioniert alles wie erwartet.

Edit: Wenn ich die Multiplikation mit "gl_FrontMaterial.diffuse" weglasse, geht es auch mit beiden Zeilen

Autor:  Schläfer [ Fr Jan 02, 2009 22:13 ]
Betreff des Beitrags: 

Ok, hat sich denke ich erledigt.

Meine Grafikkarte unterstützt gerademal schlappe 60 float varyings, was nichtmal annähernd ausreicht.

Autor:  dj3hut1 [ Fr Jan 02, 2009 22:43 ]
Betreff des Beitrags: 

Hallo Schläfer,

warum benutzt du soviele varyings?
Kannst du auf die Lichtparameter (gl_LightSource[i]) nicht auch direkt im Fragment-Shader zugreifen?

Viele Grüße
dj3hut1

Autor:  Schläfer [ Fr Jan 02, 2009 23:45 ]
Betreff des Beitrags: 

Ja, ich dachte das geht nicht, allerdings weiß ich auch nicht mehr woher ich diese Information hatte. Kann sein das ich irgendwann mal Probleme damit hatte, was dann aber wohl mehr daran lag, dass ich eigentlich keine Ahnung von sowas hatte.^^

Jetzt gehts auf jeden Fall.

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