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

Aktuelle Zeit: Fr Jul 18, 2025 08:10

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mo Jun 06, 2005 20:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Hiho Leutz,

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?


MfG Pellaeon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 06, 2005 21:30 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
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.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 06, 2005 22:27 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 07, 2005 08:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
also für Flächen berechne ich den Normalenvektor, allerdings beeinflusst dieser auch die Lichtberechnung der Linien. Das fand ich irgendwie komisch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 07, 2005 10:01 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 07, 2005 12:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
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?

Zitat:
//Lichtquelle definieren
setStandardLight(light);

light.LPosition[0]:= dxfUnit.xmin;
light.LPosition[1]:= dxfUnit.ymin;
light.LPosition[2]:= dxfUnit.zmax + length/20;
light.LPosition[3]:= 1;

light.LDiffuse[0]:= 0.6;
light.LDiffuse[1]:= 0.6;
light.LDiffuse[2]:= 0.6;

light.LAttenuationConst := 1;
light.LAttenuationLinear:= 0;
setLight(1,light);


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 07, 2005 20:42 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 07, 2005 20:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Jun 07, 2005 20:56 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 08, 2005 12:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
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


MfG Pellaeon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 08, 2005 13:31 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 08, 2005 14:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
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.


MfG Pellaeon


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jun 08, 2005 22:06 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 09, 2005 09:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,@LModelAmbient);
glShadeModel(GL_SMOOTH);

das habe ich eingestellt


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 17 Queries | GZIP : On ]