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

Aktuelle Zeit: Fr Jul 04, 2025 15:56

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Di Sep 04, 2012 21:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Irgendwie kann ich dir gerade nicht ganz folgen. Ich versuch das mal zusammenzufassen:
Du errechnest von deinem Gelände die Normalen. Diese übergibst du wahrscheinlich mit glNormal an OpenGL während du den Boden zeichnest, verstehe ich das richtig?
Dann renderst du deine Wolke, diesmal aber ohne Transparenz. Dann sieht es aus wie bei dem vorherigen Problem. Hab ich das richtig verstanden?

Was mir erstmal einfällt: Wenn ich es richtig im Kopf habe, erzeugt OpenGL automatisch Normalen für die einzelnen Dreiecke, sprich eine Normale pro Dreieck (via Kreuzprodukt auch einfach möglich). Der Befehl glNormal ist meines Wissens vor allem dazu nötig, um eine kantenlose Beleuchtung zu erziehlen. Eine Kugel sieht mit den OpenGL-Normalen aus wie ein vielseitiger Würfel, jedes Dreieck ist erkennbar. Errechnet man die Normalen selber für jeden Eckpunkt der Dreiecke, dann kann OpenGL zwischen den Normalen interpolieren und man sieht die Kanten der Dreiecke einer Kugel nicht mehr. (so funktioniert es doch, oder? Ich trau meinem Gedächtnis manchmal nicht ganz^^)
Was jetzt glNormal mit dem Blending der Wolke zu tun hat, ist mir schleierhaft... Willst du die Wolke beleuchten oder Was genau bezweckst du? Ein wenig mehr Informationen würden mir da zumindest helfen^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Di Sep 04, 2012 22:10 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Ja ich versuche die Wolken zu Beleuchten, damit ein ähnlicher Effekt wie bei dem Berg eintritt: Rückseite dunkler, Vorderseite heller.
Nun sind die Wolken ja aus komplett zr xz Ebene parallelen Flächen aufgebaut. Somit bringt mir eine automatische Berechnung der Normalen nichts.
Wie das mit den Normale der Wolke errechnet wird ist ja unerheblich. Diese sollten eigentlich passen. Habe Bildbeweise ;)

Dateianhang:
cloud5.jpg


Der Boden hat mit meinem Problem gerade nichts zu tun ;)

Das Blending dient mir um die Partikel der Wolke transparent zu machen. das Funktioniert auch.
Wenn ich jetzt allerdings das Licht aktiviere um diesen Effekt wie beim Berg zu erzielen, dann passiert das gleiche mit dem Licht bei Drehung der Kamera wie zuvor mit der Transparenz der Partikel mit schreiben in den Tiefenpuffer.

Wenn ich die Kamera um die Wolke drehe, scheine ich eher die Beleuchtung der hinteren Partikel zu sehen, als die der vorderen.

Dateianhang:
cloud6.jpg


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Di Sep 04, 2012 22:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Das wird wohl damit zu tun haben in welcher Reihenfolge deine Partikel gerendert werden und wie genau du sie blendest. Ich würde mal sagen, das aus der "richtigen" Richtung die Partikel so liegen, das sie von hinten nach vorne gezeichnet werden, während bei dem zweiten Bild die Reihenfolge nicht mehr stimmt. Da scheinst du die Schattenseite der Wolke anzugucken und dementsprechend ist die Ausgabe auch. Ist jetzt aber nur ne Idee ins Blaue hinein, da ohne schreiben in den Tiefenpuffer das in meinen Augen nicht fehlschlagen sollte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Di Sep 04, 2012 22:50 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Wie gesagt, das schreiben in den Tiefenpuffer habe ich unterbunden.
Und es läuft auch nur nicht wenn das Licht an ist.
Ohne Licht sehe ich die Korrekten Partikel.

Keine Ahnung, bin ja neu auf dem Gebie. hat das Licht seinen eigenen Tiefenpuffer oder sin krams?
Werd gerade nicht schlauer -.-

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Mi Sep 05, 2012 06:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Sorry das ich erst jetzt antworte, aber ich brauchte auch mal ne Mütze Schlaf :wink:

Dafür ist mir was eingefallen: Wenn ich mich recht entsinne, blendest du mit GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. Wenn du da sagen wir mal die beiden Ebenen mit 50:50 verblendest, dann hast du nach dem ersten Durchgang (Boden und heller Wolken-Teil) 0,5 Boden und 0,5 helle Wolke (weiß). Nun blendest du den dunklen Wolkenteil genauso drüber. Dann ergibt das 0,25 Boden, 0,25 helle Wolke und 0,5 dunkle Wolke, es bewirkt also den grauen Effekt. Wenn du hingegen zuerst die dunkle Wolke blendest, dann sollten wir uns einig sein, das du auf 0,25 Boden, 0,25 dunklöe Wolke und 0,5 helle Wolke kommst. Und da bekommst du deinen anderen Farbton.
Das ganze hat nichts mit dem Tiefenpuffer zu tun, wenn das Schreiben dahin deaktiviert ist, ist da erstmal alles in Ordnung. Versuch aber mal, als zweiten Parameter bei glBlendFunc etwas wie GL_ONE zu wählen. Das wird vielleicht seltsam und ungewollt aussehen, aber würde meine Theorie beestätigen, weil es dann unabhängig von der Reihenfolge der gezeichneten Wolkenebenen ist. Heißt, dann sollte deine Wolken aus allen Winkeln gleich gut oder schlecht aussehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Mi Sep 05, 2012 12:02 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Zitat:
Sorry das ich erst jetzt antworte, aber ich brauchte auch mal ne Mütze Schlaf

War ja auch schon recht spät ;)

Das funktioniert so leider nicht. Alle Partikel sind jetzt schlichtweg weiß.
Ich kann also nicht sagen ob der Effekt eintritt. Ich sehe es einfach nicht ;)

Ich habe jetzt einfach mal versucht die Dreiecke 2 mal auf die Karte zu schieben. so wie jetzt und dann noch mal in umgekehrter Zeicheneihenfolge, dafür halt doppelt so durchsichtig :D.
Auch das ruft seltsame Effekte hervor -.-

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Mi Sep 05, 2012 14:23 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Oh man, das wurde auch Zeit.

Problem ist gelöst: Ich habs geschafft die Dreiecke so in die DisplayList zu schaufeln, dass immer von innen nach außen gezeichnet wird.
Praktisch so wie die Wolke auch entsteht.
Falls es jemanden interessieren sollte kann ich's gern näher beschreiben.

Ich danke ca 4mrd mal für die tolle Hilfe!
Ihr seid großartig :)

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Mi Sep 05, 2012 14:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würd gern mal nen Bild davon sehen :). Das klingt nämlich wie einfache, hübsche Wolken.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Mi Sep 05, 2012 15:16 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Also am Licht muss noch bissl geschraubt werden um an der Performance des Algorythmus is auch noch zu feilen.
Ansonsten bin ich eigentlich zufrieden mit dem Ergebnis.
Dateianhang:
cloud7.jpg

Ich muss jedoch meine Euphorie etwas bremsen... Ein Bisschen ist der Effekt leider immer noch vorhanden. Ich verstehe es nicht -.-


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Do Sep 06, 2012 17:02 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
So, ich hab jetzt noch mal ne Menge Zeit damit verbracht und musste feststellen, dass das Blending mit dem Problem nichts zu tun hat.
Der unerwünschte Effekt tritt auch dann ein, wenn ich lediglich Lighting und DepthMask(False) setze.
Gibt es da bekannte Probleme?

Noch mal als kurze Erklärung. Ich sehe das Lighting der hinteren Partikel, wenn ich mich um die Wolke drehe.

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Do Sep 06, 2012 17:43 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Nun ja, wenn du ohne Blending renderst, dann bekommt du das, was ich versucht habe, auszuführen, in Reinkultur: Dadurch, dass du ohne Schreiben in den Tiefenpuffer renderst, siehst du die Wolkenpartikel, welche als letztes gezeichnet werden. Würdest du deine Liste in umgekehrter Reihenfolge abgrasen, dann dürftest du in den entsprechenden Winkeln statt der dunklen Seite nur die helle Seite der Wolke sehen. Du müsstestbei dem Ansatz also am besten in der Reihenfolge zeichnen, dass die am weitesten entfernten Dreiecke zuerst gerendert werden. Dann kannst du auch mit Blending arbeiten und der Effekt sollte aus allen Richtungen gleich sein. Natürlich ist das sehr rechenlastig, da du für jede Kamera & Wolkenposition (wenn die Wolken sich bewegen) die entfernungen neu berechnen musst. Meine Frage wäre da also eher, warum du die Wolken nicht dreidimensional zeichnest, wenn du ja anscheinend die Normalen entsprechend berechnen kannst.

Oder du gibst wieder ein wenig vom deinem Effekt an realitätstreue auf und renderst die Wolke aus einem Quad und einer Textur.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Do Sep 06, 2012 19:36 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Also die Partikel in exakt der Richtigen Riehenfolge zu Rendern ist momentan eher nicht möglich. Ich speichere das ganze in einer DisplayList und für jede Kamera-/Wolkenposi die Reihenfolge neu zu "erkundschaften" ist wohl eher schlecht, da diese ja vor dem Hochladen der DL feststehen muss... also müsste ich ja jedes mal eine neue DL erstellen und hochladen. Eher Sinnfrei wenn ich mich nicht irre.

Das einzige was ich dann wohl machen könnte ist doch in den Tiefenpuffer zu schreiben und darauf zu verzichten Wolken z.B. an Bergen o.Ä. zu positionieren. (Was mir eigentlich nicht gefällt)

Gibt es noch andere Kompromisse, die eine Option darstellen könnten?

Grüße!

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Do Sep 06, 2012 22:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Das mit dem Tiefenpuffer hast du falsch verstanden. Du hast deine Partikel in einer Ebene, das heißt, du kannst den Tiefenpuffer nicht verwenden, um die Partikel dort zu sortieren, denn deine Partikel sind sozusagen alle gleich weit von der Kamera entfernt. Wenn du in den Tiefenpuffer schreibst verhinderst du nur, das sie richtig übereinander geblendet werden, da dann das angesprochene Z-Fighting auftritt und an jedem Bildschirmpixel theoretisch nur ein einzelner Wolkenpixel gerendert werden kann (DepthFunc(GL_LESS) <-- ist doch GL_LESS, oder? Bin grad zu faul, nachzugucken).

Dein Problem entsteht ja im Endeffekt erst dadurch, das du verschieden helle Wolkenteile durch das Licht erzeugst. Nun kommt es darauf an, was zuerst gerendert wird, denn durch deine aktuellen Einstellungen wird das, was zu erst gerendert wird, immer weiter verdeckt. Bei weißen Wolken war das egal, da durch die gleiche Farbe es egal ist, wann welcher Partikel gerendert wird.

Der Tiefenpuffer kann dir in einem Fall etwas bringen: Wenn deine Partikel unterschiedliche Tiefenwerte erzeugen. Doch selbst dann müsstest du sie sortieren, da ansonsten die vorderen halbtranspaenten die hinteren verdecken. Oder du renderst ohne in den Tiefenpuffer zu schreiben, doch dann überlagern die hinteren die vorderen Partikel, wenn die hinteren als zweites geschrieben werden.

In meinen Augen hast du also wenig Möglicheiten:
A: Erzeuge deine Partikel so, das sie nicht in der xz-Ebene liegen, damit du unterschiedliche Tiefenwerte erhälst. Sortiere sie von hinten nach vorne und du erhälst schöne, aber rechenlastige Wolken.
B: Vereinfache deine Wolkenpartikel so, das sich keine mehr überlagern. Dann hast du keine Probleme mehr mit Z-Fighting, der Sortierung oder falschem Blending.
C: Erzeuge deine Wolken aus einem einzelnem Quad. Benutze dazu eine schicke Textur, dann kannst du immerhin ein wenig Details da laden und es ist sehr recheneffizient, aber nicht unbedingt perfekt. (Oder du versuchst bei einem einzelnem Quad irgendwie sowas in einem Shader, solltest du das beherrschen. Ist aber vielleicht nicht der beste Rat im Einsteigerbereich :mrgreen:)

Was immer du tust, sei dir im klaren darüber, was dein Problem ist. Du blendest zur Zeit Dreiecke zusammen in einem Verfahen, in welchem die Reihenfolge entscheidend ist, aber von dir im jetzigem Zustand selbst mit viel sortieren schwer eingehalten werden kann. Wenn du deinen dreidimensionalen Lichteffekt haben willst, kenne ich keinen anderen Weg als die Wolke entsprechend dreidimensional zu machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Mo Sep 10, 2012 15:04 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Zitat:
Wenn du deinen dreidimensionalen Lichteffekt haben willst, kenne ich keinen anderen Weg als die Wolke entsprechend dreidimensional zu machen.

Nur besteht dann ja immer noch das Problem mit der Transparenz. Wenn ich mich nicht irre.

Gibt es andere Arten sowas zu realisieren? Shader oder andere Ansätze?

Ich möchte mich nur ungern mit weniger realistischer Darstellung begnügen. (Ja hohe Ansprüche für einen Anfänger, aber ich mache was eben nötig ist: lernen!)

Grüße ;)

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Mo Sep 10, 2012 17:20 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Also wenn du es wirklich mittels eines Shaders versuchen möchtest, dann könntest du ja Folgendes versuchen:

Der Shader bräuchte ja für die korrekte Berechnung an jedem Punkt die Normalendaten sowie die Texturkoordinaten der Wolkenpartikel, welche an der Stelle waren. Das könnte man versuchen in 2 Texturen zu packen, welche der Shader verarbeitet. Deine Wolke kannst du dann aus zwei Quads (eines für von oben, eines für von unten) erstellen, welche via Shader entsprechend verschönert werden, zu erstellen. Ich weiß jetzt nicht, ob der Shader Blending vornimmt, doch ich glaube, das wird nicht durch den normalen Fragment Shader gelöst, sondern läuft weiter, du kannst also deine Quads ganz normal über deinen Boden blenden. Das wären jetzt meine Ansätze zu dem Thema, mit Shadern habe ich bisher noch nichts weltbewegendes geschafft, aber vielleicht hilft es dir ja.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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 | 15 Queries | GZIP : On ]