Registriert: Mi Nov 28, 2007 17:37 Beiträge: 17 Wohnort: Berlin
Hallo allerseits,
ich hab mal wieder einige Fragen.
Zu erst einmal zu dem was ich erreichen will ...
Ich möchte , so wie viele Anfänger, ein eigenes Sonnensystem machen was
möglichst Maßstabgetreu ist. Ja ich weis das solche Fragen hier des öfteren schon
gestellt wurden und ich habe mir diese auch durchgelesen, nur habe ich noch
keine konkreten Antworten zu meinen Problemen finden können.
Mein Fragen ...
1.) Wie kriege ich es hin das die Sonne wirklich richtig leuchtet ???
Sie soll richtig blenden wenn man zu ihr guckt und das in alle Richtungen.
Meine Kugel leuchtet halt nicht wenn ich ein Licht in ihr platziere...
Sie ist halt der Mittelpunkt und soll alles gut ausleuchten.
2.) Wie sieht es aus mit Atmosphären ???
Hat jemand schon mal versucht eine 2. größere Kugel über einen Planeten zu blenden, so
das der Eindruck einer Atmosphäre entsteht ? Wenn ja , wie erzeuge ich diesen
Effekt am besten und wer hat damit schon Erfahrung und kann Tips geben ?
_________________ Es ist ein großer Vorteil im Leben, die Fehler, aus denen man
lernen kann, möglichst früh zu begehen.
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo,
die einfachste Möglichkeit, sowohl für die Sonne als auch für die Atmosphäre, wäre es einen Ring um deine Sonne bzw. Planeten zu legen auf dem du eine eindimensionale Gradiententextur von innen nach aussen mapst.
Die Gradienten könntest du z.B. mit Gimp erzeugen...
Den Ring musst du dann in Abhängigkeit vom Blickwinkel des Betrachters drehen, so dass man immer von vorne draufguckt...
Mit dem gleichen Prinzip könnte man übrigens auch mithilfe von Noisetexturen Nebel im Weltall simulieren.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wenn du der Sonne ein Material zuweist kannst du auch selbstleuchtende Materialien definieren. Allerdings heißt das nicht, dass dann die Sonne andere Objekte beleuchtet.
Das machst du wiederum mit einem glLight welches als Omni-Light ungerichtet in alle Richtungen abstrahlt. Die Abschwächung darf halt nur minimal sein. Am besten vielleicht ausgeschaltet.
Was du nicht erreichst ist ein überblendungseffekt oder Lens-Flares. Das bekommst du nur mit Tricks hin.
Als Atmosphäre kannst du tatsächlich eine zweite Kugel drüber legen. Die solltest du mit einer Wolkentextur belegen. und wenn du willst, dass sich die Wolken dann bewegen musst du nur vor dem rendern jeweils die Texturmatrix (glMatrixMode(GL_TEXTURE)) mit glTranslate manipulieren.
Ach ja, bevor du fragst: Schatten kannst du nicht so einfach einbauen. Jedes Objekt wird von OGL immer so beleuchtet als wäre die Lichtquelle unverdeckt. Schatten sind eine fortgeschrittene Geschichte.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Damit die Sonne schön leuchtet kannst du auch noch Glow einbauen. Lässt sich relativ leicht implementieren, und macht ordentlich was her Besonders, wenn andere Planeten die Sonne (halb) verdecken, werden diese dann sehr schön überstrahlt.
dj3hut1 hat geschrieben:
Den Ring musst du dann in Abhängigkeit vom Blickwinkel des Betrachters drehen, so dass man immer von vorne draufguckt...
Registriert: Mi Nov 28, 2007 17:37 Beiträge: 17 Wohnort: Berlin
Zitat:
die einfachste Möglichkeit, sowohl für die Sonne als auch für die Atmosphäre, wäre es einen Ring um deine Sonne bzw. Planeten zu legen auf dem du eine eindimensionale Gradiententextur von innen nach aussen mapst. Die Gradienten könntest du z.B. mit Gimp erzeugen...
Das mit dem Ring hab ich auch schon überlegt so das er sich mit der jeweiligen
Kameraposition mitbewegt, aber was sind Grandienten und wie verwende ich diese ???
Die gleiche Frage habe ich dann zu Glows ...
Dazu kommt das ich auf meinen Kugeln Texturen verwende !
Würden diese sich auf Glows irgendwie negativ auswirken ???
Wenn die Interplementierung so einfach ist würde ich mich über
einen Codeschnipsel (bitte mit Erklärung) sehr freuen. Habe nämlich leider kein Beispiel gefunden und mein Englisch
ist auch nicht soooo gut das ich den Link zu Glows ausreichend
verstehe ...
_________________ Es ist ein großer Vorteil im Leben, die Fehler, aus denen man
lernen kann, möglichst früh zu begehen.
Zuletzt geändert von Mastiguas am Do Jan 17, 2008 12:27, insgesamt 1-mal geändert.
Registriert: Di Dez 27, 2005 12:44 Beiträge: 393 Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Der Gradient ist einfach nur ein Farbverlauf.
Bei der Sonne nimmst du am besten einen von Orange nach Schwarz und bei der Athmosphere einen von Hellblau nach Schwarz.
Vielleicht kannst du auch im Alphakanal einen Verlauf reinbringen.
Die Kunst ist natürlich, dann einen möglichst schönen Farbverlauf hinzubekommen, dazu muss man etwas rumexperimentieren
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Mastiguas hat geschrieben:
Die gleiche Frage habe ich dann zu Glows ... Dazu kommt das ich auf meinen Kugeln Texturen verwende ! Würden diese sich auf Glows irgendwie negativ auswirken ???
Texturen wirken sich ganz und gar nicht negativ aus. Funktioniert mit genauso gut wie ohne. Aber wenn du Texturen benutzt, kannst du den Alphakanal der Textur dazu verwenden, zu bestimmen welche Teile "glowen" sollen. Also bei der Sonne macht das ja nur bedingt Sinn, wenn überhaupt, da die Sonne ja komplett glowen soll. Aber in anderen Situationen macht es durchaus Sinn. Z.B. Die Leuchtreklame an einem Schild, man kann jetzt nur die Schrift glowen lassen.
Mastiguas hat geschrieben:
Wenn die Interplementierung so einfach ist würde ich mich über einen Codeschnipsel (bitte mit Erklärung) sehr freuen. Laughing
Das Beispiel werde ich nachreichen, hab in der Uni jetzt grad keines zu Hand @"einfach": Es bewegt sich schon an der Grenze zu etwas schwieriger, aber ich denke du bekommst das hin.
Registriert: Mi Nov 28, 2007 17:37 Beiträge: 17 Wohnort: Berlin
Gut das mit dem Glow guck ich mir mal näher dazu an ... Klingt ja an sich richtig gut , aaaaber ...
Wie sieht es dann aus mit den Schatten die entstehen würden ...
Wirft die Erde dann einen Schatten auf dem Mond wenn er sich denn im Schattenbereich
der Erde befindet so das der Mond verdeckt ist ?
Wenn nicht, wie wird der Effekt dazu am einfachsten berechnet ?
_________________ Es ist ein großer Vorteil im Leben, die Fehler, aus denen man
lernen kann, möglichst früh zu begehen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Wie oben schon erwähnt, die OpenGL-Lichtquellen haben keinen eigenen Schatten.
Den musst du selber implementieren, dafür gibt es verschiedene Verfahren:
A. Stencil-Schatten. Zunächst wird die Geometrie der Objekte (hier Kugeln, was das ganze vereinfachen dürfte, da einige Berechnungen erspart bleiben) genommen und damit eine Silouette (ich hasse dieses Wort ) gebildet. Diese wird dann zum Rendern der Schatten verwendet. Siehe dazu auch im Wiki Volumetrische_Stencilschatten.
B. Shadowmaps. Siehe dazu das (leider etwas der Überarbeitung bedürftige) Tutorial von oc2k1 im Wiki: GLSL_Licht_und_Schatten (verwendet Shader, geht aber sicherlich auch ohne, aber dann nicht nach diesem Tutorial).
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
Registriert: Mi Nov 28, 2007 17:37 Beiträge: 17 Wohnort: Berlin
OK also es sieht so aus als würde das mit dem Schatten es ganz schön in
sich haben da mir dafür doch noch das Verständniss fehlt. Da lasse ich das
erstmal im Hinterkopf und mache es lieber später als Extra oder so.
Lieber absehbare Ziele und auf denen dann aufbauen sonst ist mein kleines
Programm am Ende nur unvollendeter Datenmüll und das will ich nicht ...
Aber ein kleines Extra lässt mich nicht los ... Wie genau funktioniert der Glow-Effekt ???
... hier nochmal der Link
Die Seite ist auf Englisch und mein Englisch ist nicht so gut das ich
behaupten könnte das ich verstehe was alles genau dort steht ...
Wäre ganz nett wenn mir das einer dann auf deutsch sagen könnte.
Ich weis das ich eine Textur nehmen muss die auf ein Objekt "klebt"
und diese dann blenden mit dem Alpha-Wert einer Blendmap ...
RGB-Wert der 1. Textur x den Alpha-Wert der Blendmap Da fängts auch schon an ... ich kenne keine BlendFunc die
den RGB-Wert x den Alpha-Wert rechnet ...
1.) Wie lautet die benötigte BlendFunc ???
2.) Wie entsteht der verschwommende Effekt ???
Hier mal die Grafik von der Seite des oberen Links um zu sehen wie das Ergebniss am Ende aussehen sollte ...
_________________ Es ist ein großer Vorteil im Leben, die Fehler, aus denen man
lernen kann, möglichst früh zu begehen.
Ich mache es also folgendermaßen:
Ich rendere das Quad mit der Szenentextur, die ich zuvor gespeichert habe, 25 mal und zwar so, dass ich eine 5x5-Anordnung dieser Quads habe.
Dabei verwende ich eine Gauss-Matrix die dann den weichen Verwischeffekt erzeugt. Diese Methode ist nicht ganz so schnell, wie die andere, kommt dafür aber ohne Shader und son zeug aus. Ich würde das Preis/Leistungsverhältnis als angemessen bezeichnen.
Achja: FScreenS und FScreenT sind Variablen, die angeben, was die S und T-Koordinaten des unteren rechten Rand der Bildschirmtextur sind. Kannst du folgendermaßen errechnen:
S = ScreenWidth/TextureWidth
T = ScreenHeight/TextureHeight
ScreenWidth und ScreenHeight sollten klar sein.
XF und YF sind der Versatz der Textur.
Dieses muss im Ortho-Modus gerendert werden, mit deaktiviertem Tiefentest.
Ich hoffe, du kannst damit etwas anfangen.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Schade, jetzt habe ich extra was vorbereitet für den Glow-Effekt siehe Anhang.
Tia ne halbe Stunde zu spät Ich häng es trotzdem mal an, wäre ja blöd, wenn ich mir die Arbeit umsonst gemacht hätte.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Mi Nov 28, 2007 17:37 Beiträge: 17 Wohnort: Berlin
Also erstmal ein großes DANKE an alle die mir hier geholfen haben. Ich werde mich jetzt am Wochende mal hinsetzen und versuchen das
alles richtig zu verstehen und ordentlich durcharbeiten und mir die für
mich neuen Methoden angucken und versuchen anzuwenden auf
verschiedene Testprogramme.
Wer natürlich dennoch Lösungen zu meinen Fragen hat kann hier
gerne noch was zu schreiben ich melde mich in ca. 2 Tagen hier.
Spätestens dann gibt es wieder Probleme.
_________________ Es ist ein großer Vorteil im Leben, die Fehler, aus denen man
lernen kann, möglichst früh zu begehen.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Nur alle zwei Wochen bei Neumond, du hast recht (Edit: Ups, hier gabs wohl eine Begriffliche ungenauigkeit. Mondfinsternis ist ja <> Neumond. Kommt also nur ca. 2x im Jahr vor)
Gerade eine Sonnenfinsternis sähe aber bestimmt gut aus, wenn man sie mal Simulieren könnte. Wobei... Ohne Krümmung von Lichtstrahlen um den Mond herum lohnt sich das auch nicht.
Gruß Lord Horazont
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my 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
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.