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

Aktuelle Zeit: So Jul 27, 2025 23:13

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit Shaderbenutzung
BeitragVerfasst: Sa Nov 04, 2006 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Hi.

Ich hab mir mal ein paar weitere Beispiele für Shader rausgesucht. Unter anderem bin ich bei diesem Beispiel hier gelandet:
Vertexshader:
Code:
  1.  
  2. //
  3. // Authors: Dave Baldwin, Steve Koren, Randi Rost
  4. //          based on a shader by Darwyn Peachey
  5. //
  6. // Copyright (c) 2002-2006 3Dlabs Inc. Ltd.
  7. //
  8. // See 3Dlabs-License.txt for license information
  9. //
  10.  
  11. uniform vec3 LightPosition;
  12.  
  13. const float SpecularContribution = 0.3;
  14. const float DiffuseContribution  = 1.0 - SpecularContribution;
  15.  
  16. varying float LightIntensity;
  17. varying vec2  MCposition;
  18.  
  19. void main(void)
  20. {
  21.     vec3 ecPosition = vec3 (gl_ModelViewMatrix * gl_Vertex);
  22.     vec3 tnorm      = normalize(gl_NormalMatrix * gl_Normal);
  23.     vec3 lightVec   = normalize(LightPosition - ecPosition);
  24.     vec3 reflectVec = reflect(-lightVec, tnorm);
  25.     vec3 viewVec    = normalize(-ecPosition);
  26.     float diffuse   = max(dot(lightVec, tnorm), 0.0);
  27.     float spec      = 0.0;
  28.  
  29.     if (diffuse > 0.0)
  30.     {
  31.         spec = max(dot(reflectVec, viewVec), 0.0);
  32.         spec = pow(spec, 16.0);
  33.     }
  34.  
  35.     LightIntensity  = DiffuseContribution * diffuse +
  36.                       SpecularContribution * spec;
  37.  
  38.     MCposition      = gl_Vertex.xy;
  39.     gl_Position     = ftransform();
  40. }
  41.  


Fragmentshader:
Code:
  1.  
  2. //
  3. // Fragment shader for procedural bricks
  4. //
  5. // Authors: Dave Baldwin, Steve Koren, Randi Rost
  6. //          based on a shader by Darwyn Peachey
  7. //
  8. // Copyright (c) 2002-2006 3Dlabs Inc. Ltd.
  9. //
  10. // See 3Dlabs-License.txt for license information
  11. //
  12.  
  13. uniform vec3  BrickColor, MortarColor;
  14. uniform vec2  BrickSize;
  15. uniform vec2  BrickPct;
  16.  
  17. varying vec2  MCposition;
  18. varying float LightIntensity;
  19.  
  20. void main(void)
  21. {
  22.     vec3  color;
  23.     vec2  position, useBrick;
  24.    
  25.     position = MCposition / BrickSize;
  26.  
  27.     if (fract(position.y * 0.5) > 0.5)
  28.         position.x += 0.5;
  29.  
  30.     position = fract(position);
  31.  
  32.     useBrick = step(position, BrickPct);
  33.  
  34.     color  = mix(MortarColor, BrickColor, useBrick.x * useBrick.y);
  35.     color *= LightIntensity;
  36.     gl_FragColor = vec4 (color, 1.0);
  37. }
  38.  



Wie in den Shadern ja schon drin steht sollen sie was prozedural mit Ziegelsteinen "einfärben".
So, und jetzt kommt mein Problem - wenn ich das ProgramObject so benutze wie in den Tutorials hier im Wiki, also:
Code:
  1.  
  2.  
  3.  glTranslatef(0, 0, -10);
  4.  //Parameterübergabe und Hintergrund zeichnen:
  5.  //[...]
  6.  //[...]
  7.  
  8.  //Programobjekt aktivieren und Quadrat zeichnen auf das es wirken soll:
  9.  glUseProgramObjectARB(ProgramObject);
  10.  
  11.  glBegin(GL_QUADS);
  12.   glVertex3f(-1, -1, 1);
  13.   glVertex3f(1, -1, 1);
  14.   glVertex3f(1, 1, 1);
  15.   glVertex3f(-1, 1, 1);
  16.  glEnd;
  17.  
  18.  glUseProgramObjectARB(0);
  19.  
  20.  
  21.  
  22.  SwapBuffers(DC);
  23.  


Seh ich nur ein schwarzes Quadrat \":?\"

bei
Code:
  1.  
  2.  
  3.  glTranslatef(0, 0, -10);
  4.  //Parameterübergabe und Hintergrund zeichnen:
  5.  //[...]
  6.  //[...]
  7.  
  8.  //Programobjekt aktivieren und Quadrat zeichnen auf das es wirken soll:
  9.  glUseProgramObjectARB(ProgramObject);
  10.  
  11.  glBegin(GL_QUADS);
  12.   glVertex3f(-1, -1, 1);
  13.   glVertex3f(1, -1, 1);
  14.   glVertex3f(1, 1, 1);
  15.   glVertex3f(-1, 1, 1);
  16.  glEnd;
  17.  
  18.  
  19.  SwapBuffers(DC);
  20.  


wird hingegen alles in Ziegelsteinen gezeichnet (auch der Hintergrund)...

Tja und jetzt wüsste ich gerne woran das liegt und wie ich das beheben kann...


cya,
Deathball


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 06, 2006 15:44 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Der Shader kommt mir ja bekannt vor.
Hab ich auch schonmal (ab-)geschrieben.
Und bei mir hatts reibungslos gefunzt, aber wenn ich mich recht erinnere hatte ich das glUseProgramObjectARB(...) nur einmal in der init ausgeführt.
Könnte es vieleicht sei das man die uniform-variablen nach der glUseProgramObjectARB(...) übergeben muss?

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 06, 2006 16:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Code:
  1.  
  2.  //Hintergrund zeichnen
  3.  //[...]
  4.  
  5.  glUseProgramObjectARB(ProgramObject);
  6.  
  7.  //Parameterübergabe
  8.  //[...]
  9.  
  10.  glBegin(GL_QUADS);
  11.   glVertex3f(-1, -1, 1);
  12.   glVertex3f(1, -1, 1);
  13.   glVertex3f(1, 1, 1);
  14.   glVertex3f(-1, 1, 1);
  15.  glEnd;
  16.  
  17.  glUseProgramObjectARB(0);
  18.  


funzt perfekt - thx für die Hilfe...

cya,
Deathball


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


Wer ist online?

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