Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Hallo? Les dir doch mal durch was ich oben geschrieben habe. Da steht ne konkrete Lösung dabei. Ich bin mir ziemlich sicher, das dein vierter Paramter bei der Lichtposition gleich 0 ist, also du eine direktionale Lichtquelle hast. Direktionale Lichtquellen kann man nicht platzieren, dort wird der Positionsvektor als Lichtrichtung interpretiert. Übergib als w-Paramter für GL_POSITION also mal nen Wert > 0 und schon solte sich was ändern.
P.S. : Ich poste nur sehr selten konkreten Quellcode zur Problemlösung. Das verführt zu simplem C&P ohne das sich der Fragensteller Gedanken macht. Aber hier in dem Thread wurden einige konkrete Lösungsansätze gemacht.
Ich habe doch meinen Quellcode hochgeladen. Da ist der w-Parameter > 0, der Fehler besteht jedoch weiterhin. Außerdem möchte ich ja auch nicht unbedingt komplett verbesserten Code, sondern nur dass sich jemand mal mein Programm durchschaut und mir sagt, was daran falsch ist.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Hab jetzt mal in deinen Quellcode geschaut (übrigens fehlt die wichtigste Datei, nämlich die Projektdatei) und glaube dein Problem liegt ganz anders. Du übergibst nämlich nirgendwo Normalvektoren, ohne die die OpenGL-Beleuchtung garnicht funktionieren kann. Normalvektoren werden zur korrekten Berechnung des Lichteinfalls benötigt und müssen daher entweder per-Dreieck oder (besser) per-Polygon übergeben werden.
Zitat aus dem von mir oben erwähnten Redbook-Kapitel das wohl nicht gelesen wurde :
Zitat:
Define Normal Vectors for Each Vertex of All the Objects An object's normals determine its orientation relative to the light sources. For each vertex, OpenGL uses the assigned normal to determine how much light that particular vertex receives from each light source. In this example, the normals for the sphere are defined as part of the auxSolidSphere() routine. See "Normal Vectors" for more details on how to define normals.
Wie man Normalen berechnet wurde hier im Forum bereits mehrere Male (auch erst vor kurzem) gesagt, nutze dazu also mal die Suchfunktion. Aber wie gesagt wirst du ohne die Normalen anzugeben keine korrekte Beleuchtung hinbekommen, egal ob deine Lichtparameter korrekt sind oder nicht.
Vielen Dank, das Kapitel habe ich ehrlich gesagt übersprungen, da ich dachte das wäre nur dafür da um irgendwelche Kanten abzurunden und es realistischer aussehen zu lassen. Jetzt habe ich mir mal den Teil durchgelesen und muss sagen, das ist hardcore-Mathematik von der ich noch absolut keine Ahnung hab. Kennt da vielleicht jemand ein ausführlicheres Tutorial?
Ist eigentlich alles hier zu finden - Stichworte:
* Normale einer Fläche/eines Dreiecks bestimmen
* Punktnormale aus Normalen der angrenzenden Flächen interpolieren
Wenn du mal einen kleinen Blick ins Anfängerforum wirfst (oder die Suchfunktion verwendest), hat LarsMiddendorf dort erst kürzlich eine recht ausführliche Anleitung (mit Code) zu genau diesem Problem gegeben...
Mitglieder in diesem Forum: 0 Mitglieder und 10 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.