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

Aktuelle Zeit: Fr Jul 18, 2025 00:21

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturen und Glanz
BeitragVerfasst: Do Mär 16, 2006 17:08 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Hi,

ich stehe gerade wie ein Ochse vorm Berge. Ich bekomme keinen Glanz auf meine texturiereten Flächen. Bei farbigen klappt es. Gibts bei Texturen nen anderen Befehl???? benuze nunfolgendes:
Code:
  1.  
  2. procedure TOpenGLPersForm.Light;
  3.  
  4. const
  5.   mat_specular                : array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  6.   mat_ambient                 : array[0..3] of GlFloat = (0.6, 0.6, 0.6, 0.6);
  7.   mat_diffuse                 : array[0..3] of GlFloat = (0.5, 0.5, 0.5, 1.0);
  8.   mat_shininess               : array[0..0] of GlFloat = (50.0);
  9.  
  10. var
  11.   light_ambient               : array[0..3] of GlFloat; // = (0.8,0.8,0.8,0.<!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  12.   light_diffuse               : array[0..3] of GlFloat; // = (0.8,0.8,0.8,0.<!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->;
  13.   Wert                        : Real;
  14.   i                           : Integer;
  15.  
  16. begin { Light }
  17.  
  18.   Wert := 0.5 + TNTTrackbar1.Position / 20;
  19.  
  20.   for i := 0 to 3 do
  21.   begin
  22.     light_ambient[i] := wert;
  23.     light_diffuse[i] := wert;
  24.   end;
  25.  
  26.   glMaterialfv(GL_FRONT, GL_SPECULAR, @mat_specular[0]);
  27.   glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  28.   glMaterialfv(GL_FRONT, GL_AMBIENT, @mat_ambient[0]);
  29.   glMaterialfv(GL_FRONT, GL_DIFFUSE, @mat_diffuse[0]);
  30.  
  31.   glLightfv(GL_LIGHT0, GL_AMBIENT, @light_ambient[0]);
  32.   glLightfv(GL_LIGHT0, GL_DIFFUSE, @light_diffuse[0]);
  33.   glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  34.   glcolor3f(1, 1, 1);
  35.   glDisable(GL_COLOR_MATERIAL);
  36.  
  37.   glEnable(GL_LIGHTING);
  38.   glEnable(GL_LIGHT0);
  39. end; { Light }


Gruß

BomberbBB


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 17, 2006 16:44 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Dumme Frage: Normalen sind gesetzt? ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 20, 2006 16:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Das Problem bei OpenGL ist, das die Texturierung der Flächen erst nach der kompletten Lichtberechnung erfolgt.

Für texturierte Flächen gibt es in OpenGL einen speziellen Befehl, damit auch dort Glanzlichter funktionieren.

Probier einfach mal :

Code:
  1. glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);


:wink:

Viele Grüße
dj3hut1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Danke das wars!!!!
BeitragVerfasst: Di Mär 21, 2006 11:20 
Offline
DGL Member

Registriert: Di Sep 28, 2004 15:46
Beiträge: 54
Da wäre ich auch nicht drauf gekommen, aber

glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);

hat geholfen!!!

Danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mär 21, 2006 15:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,

falls du noch 'schönere' Ergebnisse sehen willst würde ich dir die empfehlen die OpenGL Shading Language zu benutzen :wink:
Damit kannst du ganz einfach Per-Pixel Lighting realisieren.

Die passenden Vertex- und Fragmentshader dazu sehen folgendermaßen aus :

Vertexshader :

Code:
  1. varying vec4 V;
  2. varying vec3 N;
  3.  
  4. void main() {
  5.     gl_TexCoord[0] = gl_MultiTexCoord0;
  6.  
  7.     V = gl_ModelViewMatrix * gl_Vertex;
  8.     N = normalize(gl_NormalMatrix * gl_Normal);
  9.  
  10.     gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
  11. }


Fragmentshader :

Code:
  1. uniform sampler2D tex;
  2. varying vec4 V;
  3. varying vec3 N;
  4.  
  5. void main() {
  6.     vec4 value = texture2D(tex, vec2(gl_TexCoord[0]));
  7.    
  8.     vec3 L = normalize(gl_LightSource[0].position.xyz - V.xyz);
  9.     vec3 E = normalize(-V.xyz);
  10.     vec3 R = normalize(-reflect(L, N));
  11.  
  12.     float nDotNL = max(0.0, dot(N, L));
  13.     float nDotER = max(0.0, dot(E, R));
  14.  
  15.     vec4 amb, diff, spec;
  16.     amb = gl_LightSource[0].ambient;
  17.     diff = gl_LightSource[0].diffuse * nDotNL;
  18.     spec = gl_LightSource[0].specular * pow(nDotER, 32);
  19.  
  20.     gl_FragColor = value * (amb + diff) + spec;
  21. }
  22.  


Viele Grüße
dj3hut1


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.008s | 14 Queries | GZIP : On ]