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

Aktuelle Zeit: Mi Jul 09, 2025 22:40

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



Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Licht
BeitragVerfasst: So Jan 20, 2008 12:03 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Hallo,

wie in den Tutorlials beschrieben aktiviere ich Licht in meinem Projekt mit
Code:
  1. glEnable(GL_LIGHTING);
  2.   glEnable(GL_LIGHT0);

In der Render-Prozedur setzte ich dann das Beispiel-Licht aus dem Tut:
Code:
  1. const
  2.     mat_specular   : Array[0..3] of GlFloat = (1.0, 1.0, 1.0, 1.0);
  3.     mat_shininess  : Array[0..0] of GlFloat = (50.0);
  4.     mat_ambient    : Array[0..3] of GlFloat = (0.4, 0.4, 0.4, 1.0);
  5.     mat_diffuse    : Array[0..3] of GlFloat = (0.4, 0.8, 0.4, 1.0);
  6.  
  7.     light_position : Array[0..3] of GlFloat = (0.0, 0.0, 2.0, 0.0);
  8.     light_ambient  : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  9.     light_diffuse  : Array[0..3] of GlFloat = (0.8, 0.8, 0.8, 1.0);
  10. ...
  11. glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  12.   glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  13.   glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  14.   glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  15.  
  16.   glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  17.   glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  18.   glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
  19. ...
  20. Objekte rendern etc...

Doch das ganze sieht ziemlich komisch aus, denn
a) werden einzelne Flächen der selben Ebene nach hinten immer dunkel (also wenn ich eine fläche zB in 9 Faces aufteile wird jedes dieser Faces nach hinten dunkler, bis ein neues face anfängt, das dann wiederum dunkler wird - hoffe ihr wisst was ich meine^^)
b) bei Bewegung flackern (Also manchmal dunkel, manchmal hell) einige Faces (also je nach position)

Was könnte ich falsch mache / Was braucht ihr um mir zu helfen?

// Edit Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 20, 2008 14:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
a) Liegt daran, dass OpenGL nativ nur PerVertex-Lighting unterstützt. Das macht das ganze ein wenig unschön.
b) Fällt mir gerade nichts zu ein.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 20, 2008 14:30 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Wenn ich das richtig verstehe kann ich also gegen a nichts machen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 20, 2008 14:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Doch, du könntest nen PerPixel-Shader bauen und denn verwenden.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 20, 2008 14:59 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Ich bin Anfänger - ich könnte das sicher nicht.^^ Aber vlt gibts sowas ja schon?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 20, 2008 15:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Gibts sicherlich schon. Aber kommt drauf an, wofür du das verwenden willst, wäre das sicherlich überflüssig. Zumal du damit auch die Mindestanforderungen massiv erhöhst, indem du dann ShaderModel 2.0 oder sowas brauchst.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jan 20, 2008 15:51 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Ist es eigentlich möglich, dass einzelne Objekte Schatten auf andere Objekte werfen - also dynamisch?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 21, 2008 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Wenn du das so programmierst, sicher. :)
Standartmäßig aber sind im OpenGL Licht keine Schatten vorhanden.

Wenn du dich für Schatten interessierst, ist wohl die erste Anlaufstelle dieser Teil im Wiki.

Danach heißt es googeln...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 21, 2008 19:18 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
Okay.^^

Bleibt also noch Teil B - Wenn ich nur Licht aktiviere, ohne den o.g. Code danach beim Rendern aufzurufen, dann sieht das ganze auch irgendwie nach Licht aus, nur eben nicht sehr schön, aber Flackern tut dann auch nichts?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 14:08 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
*push*

Ich glaub ich hab das irgendwie falsch verstanden - könnte mir nochmal jemand erklären wo ich was aufrufen sollte?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 14:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Noch mal zu a: ;) Werden die Flächen insgesammt dunkler oder werden die einzeln dunkler und die nachfolgenden fangen dann wieder heller an? Das Licht nimmt je nach Einstellung ab und dann werden die Flächen dunkler. Das sollte aber gleichmäßig sein. Je nach Auflösung der Objekte ist klar. Und ganz wichtig. Die normalen. Falls du dir unklar bist, dann poste mal bitte ein Bild davon, wie es aussieht. Das sagt mehr als jede Beschreibung. ;)

b: Das Problem ist, dass die Spieleindustrie eigentlich seit Jahren nur noch auf Per Pixel Licht setzen. Und ich kann mir auch gut vorstellen, dass die Treiberherstellen da einfach schlampen, weil es denen nicht wichtig erscheint und per Vertexlicht einfach irgendwo veraltet ist (Stand ca. 1996). In dem glSlang2 Tutorial gibt es auch einen Abschnitt über Per Pixel Licht geht. Aber bitte tu dir selbst einen gefallen und kopiere es nicht einfach. Versuch es zu mindest zu verstehen. Selbst wenn du jetzt nicht alles verstehst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 15:13 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
a) Die einzelnen Flächen werden dunkler - die darauffolgende Fläche fangen wieder hell an.

b) Und deshalb sieht man in manchen Perspektiven Schatten und in manchen (1° weiter) nicht (-> Flackern bei Bewegung) ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 15:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
a: Also hatte ich das doch richtig interpretiert. Dann würde ich mal überprüfen wie deine Flächennormalen stehen. Das Licht richtet sich nicht danach wo sich die Fläche befindet sondern wie die normalen stehen. Wenn du bei einer gerade Fläche die normalen nach außen neigst, dann sieht es für das Licht wie eine gebogene Fläche aus. Wie bei einer Kugel. Wenn du solche Fläche nacheinander darstellst denkt das Licht es ist eine Buckelpiste. Überprüfe das mal bitte. Falls es das nicht ist muss ich so spontan passen.

b: Was ich damit meine. Das OpenGL Licht wird kommerziell eigentlich nicht mehr benutzt und da Zeit Geld ist kann ich mir vorstellen, dass die Kartenhersteller Zeit sparen. Und so etwas wie das klassische Licht dann einfach links liegen lassen. Selbst wenn Fehler enthalten sein sollten. Also Treiberproblem mag ich da ganz und gar nicht ausschließen.

Das erklärt allerdings nicht warum es flackert. Denn Flacker klingt da für mich wirklich etwas seltsam. Kann ich mir so auch gerade nicht erklären. Bin aber auch nicht der Held was Licht angeht. Du solltest aber evtl mal schauen ob die Normalen richtig sind und ob da nicht vielleicht per zufall 2 Mal das gleiche Objekt gezeichnet wird. Stichwort ZFighting


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 15:54 
Offline
DGL Member

Registriert: So Aug 06, 2006 08:48
Beiträge: 91
a) "Dann würde ich mal überprüfen wie deine Flächennormalen" Wie kann ich das denn - also bisher habe ich nur wie im Tut beschrieben das Licht aktiviert und rufe in den Renderdurchgängen
Code:
  1. glMaterialfv(GL_FRONT, GL_SPECULAR,  @mat_specular[0]);
  2.   glMaterialfv(GL_FRONT, GL_SHININESS, @mat_shininess[0]);
  3.   glMaterialfv(GL_FRONT, GL_AMBIENT,   @mat_ambient[0]);
  4.   glMaterialfv(GL_FRONT, GL_DIFFUSE,   @mat_diffuse[0]);
  5.  
  6.   glLightfv(GL_LIGHT0, GL_AMBIENT,  @light_ambient[0]);
  7.   glLightfv(GL_LIGHT0, GL_DIFFUSE,  @light_diffuse[0]);
  8.   glLightfv(GL_LIGHT0, GL_POSITION, @light_position[0]);
auf - aber was das angeht bin ich mir schon nicht sicher ob's richtig ist. Ich wäre mir also nicht bewusst die Normalen verändert zu haben.

Zu b) Normalen: siehe oben^^; ZFighting: Das wäre natürlich eine Möglichkeit, ich werde das überprüfen :)


mfg


// Edit Lossy: Code durch Pascaltags ersetzt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 23, 2008 16:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Dein Code ist nur das initialisieren des Lichts. Und in dem Tutorial sehe ich das in dem Code so direkt nicht. Wenn du eine Fläche mit glBegin, glVertex, glEnd zeichnest, dann benötigt jeder Vertex auch eine Normale. Die musst du mit glNormal setzen. Damit weiß der Punkt in welche Richtung er zeigt. Und das Licht weiß wie es angebracht werden muss.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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