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

Aktuelle Zeit: Fr Jul 18, 2025 16:46

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Lightmaps
BeitragVerfasst: Di Mai 22, 2007 17:11 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Hallo allerseitz,

nachdem ich mich durch die Boardsuche und Google gewühlt hab und trotz allem mit relativ leeren Händen dasteh ist es Zeit für einen Thread.

Also, wie zum Kuckuck erzeuge ich Lightmaps um sie später speichern zu können? (Kann sein das dies irgendwo in der OGL BIble die ich zuhaus hab steht...aber alle Kapitel durchwühlen will ich nicht...)

Vom Verständnis her schätze ich, das ich "einfach" ein GL Light nehmen kann und das etwas anleuchten lasse. Schön und gut, die Szene ist beleuchtet, aber wie erhalte ich die Beleuchtungsdaten um sie zu speichern und beim nächsten mal mit Multitexturing nutzen zu können?

Hoffe da kann mir jemand bei helfen :)

Evil

PS: Falls das nicht mit GL Lights geht, bin ich auch für andere Vorschläge offen.

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 23, 2007 05:11 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
GL Light lohnt sich nicht. Die können ja keine Schatten und die will man ja auf jeden Fall haben, wenn man lightmaps bastelt. Aber das vorhaben ist nicht ganz einfach. Normalerweise nimmt man zum rendern der Lightmaps einen renderer, der besonders hohe Licht- und Schattenqualität erzeugen kann: Raytracer bieten sich an. Ausserdem musst du alle Faces in deiner Welt auf einer Textur schön anordnen und das ist auch kein ganz einfach zu lösendes Problem, besonders wenn man keinen Platz verschwenden will.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 23, 2007 08:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Platz soll erstmal nicht das Problem sein, mir ist erstmal wichtig den Krams überhaupt abspeichern zu können.

Raytracer...hm...sowas in der Richtung hab ich schon vermutet, hatte gehofft es auch ohne lösen zu können.

Ok, gehen wir mal davon aus ich hätte bereits einen, wie speicher ich die erzeugten Licht-/Schattenquellen dann bzw. wohin rendere ich das Licht und die daraus resultierenden Schatten. Auf einen Offscreen oder in einen der Buffer die mir OGL zur Verfügung stellt ?

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 23, 2007 09:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Schau dir mal den Artikel Packing Lightmaps an. Dort sind auch 2 Bilder von typischen Lightmaps. Und von diesen Maps bringst du normal nur einen Teilbereich mittels Multitexturing zusätzlich auf deiner Fläche auf.

Und Humus hat auf seiner Seite eine Demo (inklusive Source) zu dynamischen Lightmaps. Eigentlich nichts anderes als on the fly Lightmapberechnung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 23, 2007 09:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Den Artikel kenn ich, bringt mir aber insofern wenig da ich die Informationen doch erstmal überhaupt erfassen und speichern muss.

Oder müsste ich für jedes Face das ich hab eine leere Texture erstellen, dann den Raytracer anschmeissen und schauen was der aus der anfangs leeren Texture an Infos raufhaut? *Total verwirrt sei*

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 23, 2007 10:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ja, da liegst du in etwa richtig nur dass man bedingt durch geringe Texturenauflösung keine Per-Pixel sondern Per-Texel Informationen ablegt. Im simpelsten Falle (Packing links liegen lassen) erstellst du also für jedes Polygon deiner Szene eine Textur (am besten mit der Größe des Polygons skalieren damits auch auf großen Wänden brauchbar ist) und schiesst dann für jedes Texel einen Strahl von der Lichtquelle hin zu eben diesem Texel. Damit dann dort auch die richtigen Infos rauskommen muss man die lokalen Texturkoordinaten der Lightmap natürlich in Weltkoordinaten umrechen (und dazu das Polygon auf eine bestimmte Ebene projezieren) und dann kann man direkt den Lichtstrahl mit nem Raytracer dorthin schiessen (für sowas würde ich dann übrigens Newton verwenden, da ist ja raycasting drin, kann man auch für sowas "Missbrauchen").
Auf modernen GPUs kann man sowas aber auch (bedingt) in Echtzeit über nen Shader realisieren, aber im Normalfall werden die Lightmaps dann offline berechnet.

Das ist allerdings kein so einfaches Unterfangen und evtl. solltest dir mal den Lightmapper von Nitrogen ansehen, der ist brauchbar und da gibts sogar kompletten Delphi-Code zu.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 23, 2007 10:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Danke, werd ich mir zuhause anschauen.

@Newton: Kann ich nicht verwenden, meine Projekte sind in Java geschrieben ;)

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 24, 2007 15:49 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Den Strahlentest kann man auch mit Occlusion Queries machen. Das hat den Vorteil, dass man nicht auf Punktlichter beschränkt ist, sondern auch Ambientes Licht simulieren kann. Dazu rendern man die Szene von der entsprechenden Position in alle Richtungen mit dem Licht als Mesh (z.B. ein [umgebender] Würfel,Kugel,..) und zählt die Pixel einmal mit DepthTest eingeschaltet und einmal mit DepthTest aus. Das Verhältnis entspricht dann ungefähr der Schattierung.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]