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

Aktuelle Zeit: So Jul 20, 2025 22:51

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Verfälschte Farben
BeitragVerfasst: Fr Jun 18, 2010 15:37 
Offline
DGL Member

Registriert: Mi Mai 12, 2010 12:51
Beiträge: 16
Aufgrund meines Lichtproblemes kopiere ich zur zeit Quellcode aus Beispielen.
Füge ich den folgenden Code in meine Zeichenroutine (am Ende)
Sind alle Schatten leuchtend grün und die Kugel ist gelb wie meine Objekt die ich davor zeichne.

Ich glaube ich verstehe da etwas nicht.

Code:
 
 mat_specular : array [0..3] of GLfloat = ( 1.0, 1.0, 1.0, 1.0 );
 mat_shininess : GLfloat = 50.0;
 light_position : array [0..3] of GLfloat = ( 1.0, 1.0, 1.0, 0.0 );

glPushMatrix;
  // Generate a sphere using the OpenGL utility Library
  SphereQuadratic := gluNewQuadric();             // Create A Pointer To The Quadric Object (Return 0 If No Memory) (NEW)
  gluQuadricNormals(SphereQuadratic, GLU_SMOOTH);          // Create Smooth Normals (NEW)

  glMaterialfv(GL_FRONT, GL_SPECULAR, @mat_specular);
  glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess);
  glLightfv(GL_LIGHT1, GL_POSITION, @light_position);

  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT1);
  glDepthFunc(GL_LEQUAL);
  glEnable(GL_DEPTH_TEST);


  glTranslatef(1000.0,1000.0,0.0);          // Move the scene back 10 units so we can see the triangle properly

  glColor3f(1.0,0.0,0.0);               // Set our current rendering colour to red

  gluSphere(SphereQuadratic, 50.0, 32, 32); // Render the sphere to the scene
  glPopMatrix;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Fr Jun 18, 2010 15:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
OpenGL ist ja ne Statemachine, also hast du evtl. vorher irgendwo diese gelbe/grüne Grundfarbe gesetzt, die sich dann natürlich auf alle nachfolgenden Objekte auswirkt bis sie überschrieben wird.

P.S. : Bitte beschreib doch genauer was du machst, nicht jeder hat dein anderes Thema gelesen und auch hier schreibst du nicht genau was du machst, da ist Ursachenforschung schwierig.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Fr Jun 18, 2010 22:24 
Offline
DGL Member

Registriert: Mi Mai 12, 2010 12:51
Beiträge: 16
Hallo hier vielleicht mal ein paar Bilder.
Tut mir leid aber man kann ja nicht immer den gesamten Quelltext kopieren.

Bild OK:
Dateianhang:
Bild OK.JPG

Bild nach Zusatzt Quellcode (siehe Listing)
Dateianhang:
Bild Nicht OK.JPG

Das mit den Zuständen mag ja stimmen aber die Farbe der Kugel wird doch auf Rot gesetzt und wieso sind die Schatten grün?
Bild rotiert um Kugel zu sehen:
Dateianhang:
Bild mit Kugel.JPG


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Sa Jun 19, 2010 01:51 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
wo setzt du denn dein Licht? Das Licht kann auch eine Farbe haben.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Sa Jun 19, 2010 13:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Setz mal alle Lichtteile explizit, also auch den ambienten und diffusen Anteil, den du in deinem Code ja nicht setzt. Evtl. hast du da irgendwo schonmal falsche Werte gesetzt, denn der grüne "Schatten" deiner Kugel deutet darauf hin dass dein ambienter Farbanteil grün ist. Also setz dass alles mal explizit auf normale Werte, denn evtl. hast du das vorher auf grün gesetzt, oder dein Treiber baut mist und hat falsche Vorgabewerte dafür. Auch die Materialanteile für deine Kugel solltest du mal explizit setzen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Mo Jun 21, 2010 11:18 
Offline
DGL Member

Registriert: Mi Mai 12, 2010 12:51
Beiträge: 16
Wie mann sieht experimentiere ich zur Zeit.
Was sind denn Standard Werte?
Bei diesen Werte für Lichtquelle 0 und den gleichen für Lichtquelle 1
Ist alles grün (cllime) kein Schatten nichts mehr.
Änderung nur Setzen von Ambiente und Diffuse.

Ablauf
1.SetLight
2. Objekte malen
3. Daten Quelltext siehe unten mit Lichtquelle 1


Code:
procedure TOGLPanel.SetLight;
const
  light_position : Array[0..3] of GlFloat = (0.0, 0.0, 0.0, 0.0);
  light_ambient  : Array[0..3] of GlFloat = (0.2, 0.2, 0.2, 1.0);
  light_diffuse  : Array[0..3] of GlFloat = (0.5, 0.5, 0.5, 1.0);
  light_spot_direction  : Array[0..3] of GlFloat = (0.0, 0.0, -1.0, 1.0);
  light_spot_cutoff     : Array[0..3] of GlFloat = (10.0, 0.0, -1.0, 1.0);
begin

  if Licht then
  begin
  //  glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, 1.0);
  //  glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, 1.0);
    glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
    glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);

   // glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1.0);
  //  glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.02);
  //  glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.01);
  //  glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 0.0);

    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);


    glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, @light_spot_direction[0]);
    glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  //  glLightfv(GL_LIGHT0, GL_SPOT_CUTOFF, @light_spot_cutoff[0]);
  //  glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,100.0);
  end
  else
  begin
    glEnable(GL_COLOR_MATERIAL);
    glDisable(GL_LIGHTING);
  end;
end;


Quellcode von vorher

Code:

light_position : array [0..3] of GLfloat = ( 1.0, 1.0, 1.0, 0.0 );
light_ambient  : Array[0..3] of GlFloat = (0.2, 0.2, 0.2, 1.0);
light_diffuse  : Array[0..3] of GlFloat = (0.5, 0.5, 0.5, 1.0);

  glPushMatrix;
  // Generate a sphere using the OpenGL utility Library
  SphereQuadratic := gluNewQuadric();             // Create A Pointer To The Quadric Object (Return 0 If No Memory) (NEW)
  gluQuadricNormals(SphereQuadratic, GLU_SMOOTH);          // Create Smooth Normals (NEW)

  glMaterialfv(GL_FRONT, GL_SPECULAR, @mat_specular);
  glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess);
  glLightfv(GL_LIGHT1, GL_AMBIENT,  @light_ambient[0]);
  glLightfv(GL_LIGHT1, GL_DIFFUSE,  @light_diffuse[0]);
  glLightfv(GL_LIGHT1, GL_POSITION, @light_position);

  glEnable(GL_LIGHTING);
  glEnable(GL_LIGHT1);
  glDepthFunc(GL_LEQUAL);
  glEnable(GL_DEPTH_TEST);


  glTranslatef(1000.0,1000.0,0.0);          // Move the scene back 10 units so we can see the triangle properly

  glColor3f(1.0,0.0,0.0);               // Set our current rendering colour to red

  gluSphere(SphereQuadratic, 50.0, 32, 32); // Render the sphere to the scene
  glPopMatrix;

  glPopMatrix;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Mo Jun 21, 2010 12:37 
Offline
DGL Member

Registriert: Mi Mai 12, 2010 12:51
Beiträge: 16
Einfügen dieser Zeilen bewirkt schon die Grüne Farbe bei meine Projet ohne den zusätzlichen Quellcode mit der zweiten Lichtquelle.
Ändern der Parameter von 0.5 auf z.B. 1.0 bewirkt garnichts.

Code:
light_ambient  : Array[0..3] of GlFloat = (0.2, 0.2, 0.2, 1.0);
  light_diffuse  : Array[0..3] of GlFloat = (0.5, 0.5, 0.5, 1.0);
 
glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);


Zeilen weg alles OK


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Mo Jun 21, 2010 13:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Du willst ein Spotlicht, richtig? Zumindest setzt du da GL_SPOT_DIRECTION, also gehe ich mal davon aus.
Im Wiki findet sich zu GL_POSITION:
Zitat:
Wenn die w-Komponente 0.0 ist, wird die Lichtquelle als gerichtete Lichtquelle behandelt, wobei GL_POSITION die Richtung darstellt.

Setze also deine Position mal auf ( 1.0, 1.0, 1.0, 1.0 ). Damit hättest du ein Punktlicht. Um daraus ein Spotlicht zu machen musst du GL_SPOT_CUTOFF setzen. Dieses ist nämlich standardmäßig auf 180, was die Spot-Funktion deaktiviert.

Deine aktuelle Position (0,0,0,0) bewirkt ein direktionales Licht ohne Richtungsangabe...das kann nicht funktionieren.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Di Jun 22, 2010 10:43 
Offline
DGL Member

Registriert: Mi Mai 12, 2010 12:51
Beiträge: 16
Eigentlich dachte ich das w= 0 ein gerichtetes Licht macht und mit GL_SPOT_DIRECTION die Richtung angegeben wird (siehe Link)

http://jerome.jouvie.free.fr/OpenGl/Tutorials/Tutorial13.php

Aber Danke mit Punktlichtquelle funktionierts zumindest auf einigen Rechnern mehr, allerdings war das mehr der andere Thread 'Betriebssystem Problem"

Warum versteh ich natürlich nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Verfälschte Farben
BeitragVerfasst: Di Jun 22, 2010 10:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also in deinem Tutorial steht:
Zitat:
A directional light emits light from an infinite distance. The ray emitted are all parallel and have the same direction (defined by the property GL_POSITION).

oder mit Worten unseres Wikis:
Zitat:
Wenn die w-Komponente 0.0 ist, wird die Lichtquelle als gerichtete Lichtquelle behandelt, wobei GL_POSITION die Richtung darstellt.


Geh doch mal durch den Artikel im Wiki und schau durch ob du die Parameter auch alle richtig benutzt:
http://wiki.delphigl.com/index.php/glLight#Beschreibung

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 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.009s | 16 Queries | GZIP : On ]