hab da ein Prblem: ich habe ein Programm was eine dxf-Datei ausliest und die geometrischen Daten daraus darstellt. Als Ergebnis kommen da Drahtgittermodelle in die auch Flächen eingearbeitet sein können.
Damit das ganze einen räumlichen Eindruck macht möchte ich eine Lichtquelle einfügen, sodass ein schöner Farbverlauf zustande kommt von hell nach dunkel.
Mein Problem: Momentan habe ich einen Punktstrahler, allerdings bekomme ich kaum einen Farbverlauf rein. Entweder ist es generell ziemlich dunkel oder es ist generell hell.
Die Objekte können hierbei mehrere 100 Einheiten lang sein.
Hat jemand eine Idee oder Tipps wie ich das honbekommen kann?
Ich tippe mal darauf, dass du keine Normalvektoren sendest - dann haben alle Vertices automatisch den voreingestellten und werden natürlich gleichzeitig hell/dunkel beleuchtet. Einfach für jede Fläche Normalvektor berechnen und mit den korrespondierenden Schnittpunkten mitsenden - oder vorher noch "drüberinterpolieren", wenn du weiche Farbübergänge haben möchtest.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Außerdem solltest du daran denken, dass das Licht anhand der Vertices berechnet wird und dann zwischen diesen Interpoliert wird. Sind die Flächen sehr groß, sieht die Beleuchtung nicht sehr Sprizig aus.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also wenn du zum Beispiel eine Fläche renderst dort dann einen Flächennormale angibst, dann zieht die sich so lange durch bis eine neue Normale angegeben wurde. Das ist ziemlich genau so wie es auch mit den Farben der Fall ist. Soll bedeuten. Sobald du beim Rendern von Flächen nach Linien wechselst musst du eine Normale setzen. Dort könnte eine Hardcodierte in PositiverZ Richtung ausreichen. Weiß ich aber nicht so genau. Ich beleuchte meine Linien normalerweise nämlich nicht. Von Linien nach Flächen dürfte es egal sein, da du bei Flächen wohl immer eine Normale angibst. Wenn ich das richtig verstanden habe.
Noch etwas nicht ganz unwichtiges was gerne vergessen wird. Wenn du das Model mit glScale etc. skalierst musst du OpenGL auch sagen, dass er die Normalen anpassen darf. Anderenfalls kann es passieren, dass das Licht vorne und Hinten nicht hinhaut obwohl es eigentlich richtig wäre. glEnable(GL_NORMALIZE); heißt da das Zauberwort.
Also die Reihenfolge der Objekte kenn ich nicht, wie gesagt ich lese aus einer beliebigen Datei. Das mit dem Ändern des Normalenvektors werde ich noch bei den Linien einfügen.
Irgendwelche Transformationen von OpenGL benutze ich nicht auf die Objekte.
Ich vermute das wohl wirklich die Objekte zu groß sind und daher kein Verlauf sichbar wird, weil da ist die Lichquelle. Wenn ich die Werte für die Abschwächung ändere(konst.,linear,quadr.) wird das auch heller oder dunkler. Also muss die Lichtquelle ja richtig angelegt sein.
Gibts sonst echt keine weiteren Einflussmöglichkeiten der Lichtquelle?
Erst setze ich die Eigenschaften der LichtquelleO (Standard) und füge dann nur diese Änderungen durch, setLight(...) setzt dann die Lichtquelle mit OpenGLCode
Mehr mach ich da nicht(natürlich Licht aktivieren usw. ist schon da^^)
Wenns nicht über das Licht geht muss ich dann wohl oder übel interpolieren, wie schon jemand vorgeschlagen hat
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Deine Lichtquellen haben den standard Abschwächungsfaktor. Der bewirkt (siehe Hilfe/Wiki) das es zu keiner Abschwächung kommt, und die Lichtquelle überall gleich hell ist.
Bei Räumlichen Körpern kommt es durch die verschiedenen Normalen zum Räumlichen Eindruck. Bei Linien hast du ja pro Vertex die Selbe Normale, und da die Lichtstärke auch gleich ist, müsste auf der Linie kein Farbverlauf zu sehen sein.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
wenn ich flächen drinnen habe, waren die meist einheitlich eingefärbt, wenn ich eine lineare Abschwächung benutzt habe war alles einfach ziemlich dunkel, ich werde mal noch ein bisschen rumtesten mit den werten.
Aber in die Linien bekomme ich also keinen Farbverlauf rein?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nur mittels Abschwächung (bei den Normalen hast du ja keinen Spielraum). Ich weiß ja auch nicht wie lang deine Linien sind. Bei der Linearen abschwächung musst du einfach werte nehmen die knapp über null liegen. Damit könntest du die abschwächung etwas rausschieben.
Die Abschwächung wird für OGL-Eiheiten berechnet. Es könnte deshalb auch helfen, wenn du das modell mittels glScale verkleinerst.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Erstmal danke für die Hilfe. Ich werde da jetzt mal ein bisschen mit den Werten rumprobieren.
Die Linien können mehrere 100 Einheiten lang sein.
Nur eine Frage habe ich noch: kann man in OpenGL irgendwie die Intensität der Lichtquelle beeinflussen? Also mehr alsu nur die Werte 0-1 für diffuse, usw. Anteile
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nun was soll es denn da deiner Meinung noch zu verstellen geben? Wenn deine Linien mehr Licht zurückwerfen sollen, dann liegt das wahrscheinlich am Material. (siehe Wiki: glMaterial)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Material benutze ich nicht. Mit "meiner Intensität" meinte ich folgendes: hast ne Glühlampe und erhöhst den Strom, sodass die immer heller wird, damit auch weiter entfernte Objekte beleuchtet werden. Aber es scheint wohl wirklich an der Größe zu liegen.
Habe jetzt aus dem Punktstrahler ein Spotlicht gemacht und dann bekomme ich an der Grenzstelle des Lichtkegels einen Farbverlauf. Allerdings halt nur dort, alles davor ist hell, alles danach dunkel.
Die Linien werden leider trotzdem immer nur in einer Farbe gezeichnet, sind also entweder hell oder dunkel, aber ohne Verlauf.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du mit deinem Strahler nur einen Vertex deiner Line beleuchtest und den anderen nicht, dann müsste ein Farbverlauf zustande kommen, da zwischen den Vertices die Farbe interpoliert wird.
Welches ShadeModel hast du eingestellt? (Kann mir zwar nicht vorstellen, dass das die Beleuchtung beeinflussen kann, aber...)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.