erstmal möchte ich mich vorsorglich entschuldigen, dass ich dieses leidige Thema hier - mal wieder - anschneide.
Ich möchte meine Szene mit OpenGL-Licht ausstatten. mit gluSphere und gluCylinder funktioniert das auch fast wunderbar. "Fast" weil sich das Licht noch "mit mir zusammen" durch den Raum bewegt und nicht still steht. Aber für dieses Problem habe ich denke ich schon genug Informationen gefunden.
Was ich absolut nicht versteht ist, wie ich die Normalen für meine Quads berechnen kann. Ich habe nur Hinweise darauf gefunden, wie das mit Dreiecken geht (wenn ich das so richtig verstanden habe). Unten habe ich den Quelltext für zwei Quads beschrieben. Wie würde für diese zwei Quads die Normalen aussehen? Wie genau kann ich sie berechnen? Funktioniert das ganze wirklich nur, wenn ich meine gesamte Szene auf Dreiecke umstelle?
Ich weiß, sicher viele dumme Fragen aber zum Einen habe ich noch nie etwas mit Licht gemacht und zum Anderen habe ich ein recht übles mathematisches Verständnis. Ich denke aber mal, dass es vielen so wie mir geht und sicher nicht nur mir damit geholfen wäre, anhand der beiden Quads "da unten" mal eine Beispielrechnung durchzuführen. Ich hoffe das das nicht zu viel verlangt ist!
Code:
glBegin(GL_QUADS);
glTexCoord2f(1,1); glVertex3f(-1,-1,1);
glTexCoord2f(1,0); glVertex3f(1,-1,1);
glTexCoord2f(0,0); glVertex3f(1,1,1);
glTexCoord2f(0,1); glVertex3f(-1,1,1);
glTexCoord2f(1,1); glVertex3f(-1,-1,-1);
glTexCoord2f(1,0); glVertex3f(-1,-1,1);
glTexCoord2f(0,0); glVertex3f(-1,1,1);
glTexCoord2f(0,1); glVertex3f(-1,1,-1);
glEnd;
Vielen Dank für jeden Versuch mir dieses Thema irgendwie näher zu bringen!
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Also mit Vierecken funktionert das eigentlich genau so wie mit Dreiecken. Ein Viereck setzt sich ja aus zwei Dreiecken zusammen. Du musst also nur für die zwei Dreiecke die Normalen berechnen, wenn du weißt, dass die Dreiecke in einer Ebene liegen, reicht es auch aus, wenn du das einmal machst.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Öhm... Ich kenn die Funktionen zwar nicht, aber so wie das aussieht berechnest du nirgendwo die Normalen. Normalize bringt die Vectoren nur auf länge 1, und make Vector pressed die Zahlen in ein Array. Du musst das Kreuzprodukt zweier in der Ebene deines Polygons liegenden Vectoren bilden. Das ist die Normale. Guck für die Formel mal in ein Tafelwerk unter Kreuzprodukt.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
So sieht der Codeschnipsel aus und das ganze funktioniert auch so.
Der Winkelpunkt der weiß eingezeichneten Linien ist die Position des Lichtes. Sollte es jedenfalls sein, denn der Zylinder wird dann ja irgendwie nicht so richtig angeleuchtet. (Liegt wohl eher an den weißen Linien, das die nicht die richtige Position haben).
Jetzt bleibt die Frabe, wie ich einen Schatten auf die Wand hinter den beiden Säulen bekomme. Die Rückwand wird zwar auch von unten nach oben hin heller, aber der Schatten fehlt. Leider auch auf dem Boden...
Zudem hat der Boden überall den gleichen "Schattenwert". Die Berechnung erfolgt wie bei den Wänden auch aber der "Schattenwert" ist überall gleich. Es handelt sich dabei um ein Quad, welches mit glScale auf die entsprechende Größe vergrößert wurde. Bleibt mir da nichts anderes übrig, als den Boden aus mehreren Quads zu erstellen? Und wenn warum? Die rückwand in dem Beispiel besteht auch nur aus einem Quad, trotzdem sieht man einen Hell-Dunkelverlauf von unten nach oben...
Fragen über Fragen...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also die Lichtberechnung geht folgendermaßen:
1. Berechne Lichtintensität in den Eckpunkten
2. Interpoliere intensitäten über die Fläche
Wenn deine Eckpunkte alle sowei weg sind, dass sie rein Lichttechnisch eh nur noch per Ambienten licht beleuchtet werden, dann wird die Interpolation auch nix anderes mehr liefern.
Nur mal um das Problem zu verdeutlichen:
Nimm ein großes Quad und häng in der Mitte ein Licht drüber. Wenn die Eckpunkte des Quads soweit vom Licht wegliegen, dass die Abschwächung dafür sorgt, dass die Eckpunkte im Dunkeln liegen, dann wird auch das Stück direkt unter dem Licht nicht beleuchtet.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.