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

Aktuelle Zeit: Fr Jul 04, 2025 21:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Wolken... aber wie?
BeitragVerfasst: Do Aug 30, 2012 22:30 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Moin.

Ich wüsste gern, was der grundsätzliche Ansatz ist, wolken einigermaßen realistisch dazustellen!?
Welche Techniken sollte man benutzen, welche Optimierungen sind möglich/nötig?

Ich habe mir jetzt einfach mal ein paar-Tausend Partikel genommen die lediglich GL_POINTS darstellen und lasse diese durch die Gegend fliegen ;)
Sieht natürlich reichlich bescheiden aus und ist auch nicht besonders Performant. Ab 15000+ geht's ruckeln los, weil die Datentrasferrate natürlich an ihre Grenzen stößt.

Für ein paar Hinweise wäre ich dankbar.
Grüße!

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Do Aug 30, 2012 23:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

nimm anstatt der Punkte Billboards mit ner wolkigen Textur. Da kannst du dann auch anhand der Größe, Anzahl, TexturDetails, ... bestimmen wie gut das ganze läuft.

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Fr Aug 31, 2012 00:09 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Sieht denn das gut aus?
Kann mir vorstellen, dass solch ein 2D-Objekt in der Scene einen etwas crappygen Eindruck macht.
Wenn ich das richtig verstanden habe dreht sich das Teil praktisch immer zum Betrachter oder?

Ich werd mich mal einlesen während ich auf das Ergebnis meines Algorythmus warte... schnarch -.-

_________________
ack nack nack nack nack


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Fr Aug 31, 2012 07:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ich mache das mit einem Skydome, Texturen mit Wolken drauf und einem simplen Shader. Auf dem Skydome werden dann im Shader mehrere Wolkenschichten dargestellt indem man sich einfach aus den Texturen mehrere Samples an unterschiedlichen Positionen holt. Mit einem Timer kann man dann die einzelnen Schichten unterschiedlich schnell (und evtl. in verschiedene Richtungen) bewegen lassen. Außerdem kann man das Blau des Himmels winkelabhängig verändern.

Bild

In Bewegung sieht es noch ein wenig besser aus.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Fr Aug 31, 2012 09:13 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Du kannst auch Volumetrische Wolken malen, ist nur um einiges mehr initialaufwand.
Da gibt es Professionelle Lösungen http://sundog-soft.com/sds/features/real-time-3d-clouds/, welche auch schon Papers über die Implementierung veröffentlicht haben.
In der Regel reichen aber normale Bilboards und multi layer skydome aus.
Es gibt auch einige Spiele, die den Himmel statisch lassen, was natürlich am besten aus sieht und am wenigsten Arbeit macht aber halt nach ner weile auf fällt.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wolken... aber wie?
BeitragVerfasst: Fr Aug 31, 2012 22:16 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Also das mit dem Skydome funktioniert bei mir eher nicht.
Ich sehe die Wolken von oben und muss auch durch sie hindurch-zoomen können.

_________________
ack nack nack nack nack


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

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
So, nach einigen Anläufen und diversen verschiedenen Ansätzen habe ich nun etwas auf dem Bildschirm, das aussieht wie eine Wolke:
Dateianhang:
cloud1.jpg


Das Problem ist, sobald ich mit der Kamera aus der Richtung auf die Wolke schaue, aus der auch das Licht kommt (grob, sobald ich sozusagen in die beiden Quadranten komme, die aus sicht der Wolke dem Licht zugewandt sind), wird die Wolke praktisch durchsichtig.
Dateianhang:
cloud2.jpg


Da ich die Ahnung hatte, dass das Licht in der Sache eine Rolle spielt, habe ich versucht es für die Primitiven der Wolke zu deaktivieren (haben eh keine Normalen). Jedoch ohne Erfolg.

So sieht der umliegende Coe also aus:
Code:
  1.  
  2.                     Cloud c = objects.getCloud(i);
  3.                     Gl.glDisable(Gl.GL_LIGHTING);
  4.                     Gl.glEnable(Gl.GL_BLEND);
  5.                     Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA);
  6.                     Gl.glColor4d(1, 1, 1, 0.45);
  7.                     Gl.glBegin(Gl.GL_TRIANGLES);
  8.                     //Console.WriteLine("triangles: " + c.getTriangleCount());
  9.                     for (int y = 0; y < c.getTriangleCount(); y++) {
  10.                         Triangle tri = c.getTriangle(y);
  11.                         Vector realPosition = c.getRealPosition();
  12.                         Point A = tri.getA();
  13.                         Point B = tri.getB();
  14.                         Point C = tri.getC();
  15.                         double realX = realPosition.getX();
  16.                         double realY = realPosition.getY();
  17.                         double realZ = realPosition.getZ();
  18.  
  19.                         //Console.WriteLine(realPosition);
  20.  
  21.                         Gl.glVertex3d(realX + A.getX(), realY + A.getY(), realZ + A.getZ());
  22.                         Gl.glVertex3d(realX + B.getX(), realY + B.getY(), realZ + B.getZ());
  23.                         Gl.glVertex3d(realX + C.getX(), realY + C.getY(), realZ + C.getZ());
  24.                     }
  25.                     Gl.glEnd();
  26.                     Gl.glDisable(Gl.GL_BLEND);
  27.                     Gl.glEnable(Gl.GL_LIGHTING);

Ich konnte bisher nicht rausfinden, woran das liegt. Hat da jemand ne Idee?

EDIT: Ich habe die Lichtposition gerade einfach mal verändert und konnte so feststellen, dass diese rein gar nichts mit dem unerwünschenten Effekt zu tun hat (Wie vermutet, da weder Lighting für die Wolken aktiv war, noch normalen gesetzt sind)


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 15:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Wenn ich das richtig sehe, dann könnte deine Wolke in dem Code mehrere sich überlappende Dreiecke haben. Wenn diese in der selben Ebene liegen, kann ich mir vorstellen, das der Tiefentest bei entsprechendem Winkel da die Teilweise filtert (siehe auch Z-Fighting). Versuch mal, den Tiefenstst zu deaktivieren, vielleicht löst das das Problem. Solange du die Wolken als Letztes renderst, sollte die Darstellung dann auch noch in Ordnung wirken (wenn ich da jetzt nicht irgendwas vergessen habe).


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

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
da haben wir doch sogar einen Artikel zu: Z-Fighting

_________________
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: Di Sep 04, 2012 15:52 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Hui, cool... Danke ;)

Zitat:
Wenn ich das richtig sehe, dann könnte deine Wolke in dem Code mehrere sich überlappende Dreiecke haben
Das siehst du richtig... Sie besteht aus Schichten von Punkten, die um sich herum Dreiecke erzeugen (ja, ein Kreis xD).

Dieses Problem hat sich damit scheibar gelöst:
Dateianhang:
cloud3.jpg


Zitat:
Solange du die Wolken als Letztes renderst, sollte die Darstellung dann auch noch in Ordnung wirken
Das stimmt scheinbar (leider) nicht.
Der rechte Teil der Wolke sollte jetzt natürlich durch den Berg verdeckt und nicht zu sehen sein... Wie kann ich das denn reparieren? -.-


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 15:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Tiefentest deaktivieren ist eher ungut an der stelle dann. Besser ists, das schreiben in den Tiefenpuffer für die wolke zu deaktivieren, mit glDepthMask(False).

Außerdem würde ich empfehlen die Wolkendreiecke etwas anders zu blenden. Versuch mal ne Farbe wie (0.9, 0.9, 0.9) (oder gar mit 0.99) und dann glBlendFunc(GL_DST_COLOR, GL_ZERO).

//Edit: Nein, scheint nicht so gut, wartmal…
Nur aus Spaß, probier mal glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)

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: Di Sep 04, 2012 16:14 
Offline
DGL Member

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Works just perfectly ;)
Dateianhang:
cloud4.jpg


Zitat:
das schreiben in den Tiefenpuffer für die wolke zu deaktivieren, mit glDepthMask(False)
Kannst du mir erklären, was da passiert?
Bei der Sache mit dem abgeschaltetem Tiefentest ist mir das klar, hier leider nicht.

Vielen Dank bis hier hin, bin zufrieden für die ersten Stehversuche ^^


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 16:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 04, 2012 15:14
Beiträge: 10
Programmiersprache: Delphi
Nun ja, es wird zwar getestet, ob die Wolke über dem Boden sich befindet, aber für die Pixel, die da gezeichnet werden bleibt der Wert im Tiefenpuffer immer noch der Wert des Bodens. Das nächste Dreieck der Wolke testet also wieder gegen den Wert des Bodens und wird dementsprechend auch gezeichnet. Würdest du andersrum den Farbpuffer auf false setzen, den Tiefenpuffer aber auf true, dann würdest du die Tiefenwerte für die Dreiecke bekommen, nicht aber die Farbwerte. Ich hoffe, das macht das ganze etwas klar...

Oder wenn du es dir Bildlich vorstellen willst: Im Tiefenpuffer ist deine Wolke nicht gezeichnet und würdest du am Boden da jetzt eine Figur zeichnen, wäre sie scheinbar über die Wolke gezeichnet, deshalb müssen die Wolken als leztes (wie eigentlich alles, was Transparent ist, auch wegen dem Blending).


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

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Jo, danke! Das macht Sinn.

Wäre nie von selbst auf die Lösung gekommen. Vielen Dank!

_________________
ack nack nack nack nack


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

Registriert: Di Aug 21, 2012 19:31
Beiträge: 173
Programmiersprache: C#
Hmmm ok, ich hab mir nun was ausgedacht um auf die Normalen zu kommen.
Wenn ich jetzt mal die Tranzparenz entferne und das Schreiben in den tiefenpufferl wieder erlaube sieht das auch prima aus,
Schalte ich das Schreiben in den Tiefenpuffer wieder ein, scheint das gleiche zu passieren, wie vorher ohne Tiefenpuffer.
Irgendwie scheint es das Licht nicht zu interessieren, ob in den Tiefenpuffer geschrieben wird oder nicht.
Versteht irgendwer was ich meine? :D

Freue mich über Hilfe.

_________________
ack nack nack nack nack


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 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 1 Gast


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 | 16 Queries | GZIP : On ]