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

Aktuelle Zeit: Fr Jul 18, 2025 03:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [Erledigt] Merkwürdiges Problem
BeitragVerfasst: Fr Jan 02, 2009 21:44 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
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


Zuletzt geändert von Schläfer am Fr Jan 02, 2009 23:46, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 02, 2009 22:13 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ok, hat sich denke ich erledigt.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 02, 2009 22:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
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

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 02, 2009 23:45 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
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.


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 1 Gast


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.007s | 15 Queries | GZIP : On ]