Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ist das tatsächlich ein Fehler oder tut OpenGL nur genau das was du ihm gesagt hast?
Wenn du zum Beispiel die Farbe auf weiß gestellt hast und du dann irgendwelche Primitive (zum Bespiel durch gluSphere) zeichnest, dann erscheint auch nur ein weißer Fleck. Was auch ein vollkommen richtiges Verhalten ist. Allerdings kann man anhand deiner "Beschreibung" nur raten was da eigentlich passieren sollte etc.
Registriert: Do Feb 21, 2008 22:10 Beiträge: 89 Wohnort: Boppard
Habe etwas bemerkt:
Wenn ich glEnable(GL_NORMALIZE) aufrufe, funktioniert das Licht!
Aber das dürfte doch nicht so sein?!
Immerhin kann ich meine Welt u.a. einfach so skalieren, da tritt dieser Fehler nicht auf. Warum dann bei gluSphere?
(Letzteres prüfe ich aber nochmal)
EDIT: Nein es scheint nicht so zu sein.
Aber soll das heißen, ich kann keine Objekte skalieren, ohne dass dann die Normalen falsch sind?
Also ich habe meine Welt in einer DisplayList und ich kann die also nicht einfach vergrößern / verkleinern,
außer ich verwende GL_NORMALIZE?!
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ach es geht um Licht? Falls das etwas ironisch klingt. Das täuscht. Nicht nur etwas.
Die Normalen werden durch das Skalieren und Rotieren mitverändert. Die Lichtberechnung von OpenGL beruht aber darauf, dass die Normalen eine Länge von 1 haben. Bzw länger und kürzere Normalen haben Einfluss auf die Intesität des Lichtes. Dafür gibt es GL_NORMALIZE. Das sorgt dafür, dass beim Skalieren die Normalen angepasst werden damit deren Länge immer 1 ist.
Neben GL_NORMAL gibt es noch GL_RESCALE_NORMAL_EXT aus der Erweiterung GL_EXT_rescale_normal. Allerdings muss ich gestehen. Ich weiß nicht mehr genau was diese Erweiterung macht.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich halte Google definitiv nicht für die Antwort auf alle Frage. Wenn man Dinge sucht deren Legalität schon fast bedenklich ist, dann ist man bei Google sicher richtig. Aber sonst gibts genügend Alternative die sich vor allem nicht so offen manipulieren lassen. Abgesehen davon sind solche Bröckchenposts nicht mein Stil.
Was diese Erweiterung angeht. Da habe ich den Link auf die Spezifikation gepostet. Dort steht wirklich alles drin was man über diese Erweiterung wissen muss. Ein besseres Werk wird man nicht finden. Denn solch eine Spezifikation beschreibt genau was die Erweiterung bietet und wie sie sich zu verhalten hat etc. Nur ist diese eben komplett auf Englisch. Es ist auch gut möglich, dass ich mich was diese Erweiterung angeht sogar gerade vertue. Letzte mal, dass ich was mit OpenGL Licht gemacht habe ich bestimmt schon 6-7 Jahre her. Und ich bin absolut unfit was diese ganzen Vektor und Matrixrechnungen angeht.
Alternativ kannst du es auch einfach mal aktivieren und schauen ob es sich besser verhält oder nicht. Eventuell auch in Kombination mit GL_NORMALIZE.
Was ein Verzicht auf glScale angeht wirst du sicher recht haben. Wenn die Normalen durch Skalieren nicht verändert werden dann bleibt die Lichtberechnung auch gleich. Wenn du das Skalieren also nur brauchst um deine Kugel von einem Radius 1 auf 2 zu erweitern, dann geht das auch ohne. Selber ein Skalieren von beliebigen Objekten zu berechenn ist aber nicht sinnvoll. Aber dafür gibts ja eigentlich GL_NORMALIZE.
Mitglieder in diesem Forum: Google [Bot] 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.