Ich habe ein sehr spezielles Problem in der OpenGL in Delphi Programmierung.
Ich habe eine 3D-Landschaft mit Bäumen und Blumen erstellt.
Jeder Baum besteht aus einer Textur, die 8 mal je etwas rotiert gezeichnet wird, so wie es in dem Tutorial von Sascha beschrieben ist, der Schatten des Baumes besteht aus der gleichen Textur, die einfach um 90 Grad an der Z-Achse rotiert am Boden gezeichnet wird.
Schattenfarbe ist je circa glColor4f(0,0,0,0.2);
Jeder Schatten der Bäume wird dabei etwas übereinander versetzt gezeichnet, so dass sich die Schatten verschiedener Pflanzen überlagern.
Ich habe jetzt zusätzlich noch mehrere Grastexturen gezeichnet, so dass eine Wiese entstanden ist.
Wie kann ich jetzt, schnell und einfach, die Grastexturen entsprechend dem Schatten der Bäume einfärben?
Gegebenenfalls mit Blending? (glBlendFunc)
Erschwerend kommt hinzu, dass der Wald zufallsgeneriert wird.
Also, es handelt sich wirklich um etwas *sehr* spezielles.
Ich stecke noch nicht richtig in der Materie, habe aber trotzdem nicht im "Einsteiger-Unterforum" gepostet.
Es könnte ja einen schnellen Trick zum Zeichnen geben, ohne dass ich mit viel Aufwand bei jeder Schattentextur die Umrandungen des Schattens (Alphachannel = 1) angeben müßte, und damit dann überprüfen müßte, ob die Grastextur in diesem Bereich liegt.
Zur Verdeutlichung meines Problemes zwei Screenshots:
Also das erste Bild sieht trotzdem besser aus, und das Gras sieht garnicht gut aus ohne Selfshadows!
Edit: Was soll das den werden? Sieht bisher doch ganz Hübsch aus!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Also das erste Bild sieht trotzdem besser aus, und das Gras sieht garnicht gut aus ohne Selfshadows!
Edit: Was soll das den werden? Sieht bisher doch ganz Hübsch aus!
Danke Keine Ahnung, was das werden soll, habe einfach, um mich in OpenGL einzuarbeiten, losprogrammiert, ohne jetzt ein Konzept zu haben. Ich versuche, möglichst viele Effekte einzubauen, vielleicht kommen noch npcs dazu. Meiner Meinung nach sieht das Gras gut aus, vor allem wegen den (auf dem Screenshot nicht zu sehenden) Windeffekten, die es allerdings auch für die restlichen Pflanzen und Bäume (und deren Schatten) gibt.
HaschHase hat geschrieben:
ich weis nicht genau wie sniper es gemeint hat aber ich denke du sollst erst das grass normal zeichen und dann mittels der blend function glBlendFunc(GL_ONE, GL_ONE); den schatten danach weil normal hast du dann ja den schatten noch über dem gras, was ein schöner effekt sein dürfte war das so richtig?
Fehlanzeige Ich stelle mal die "struktur" des programmes da:
Gras und Pflanzen sind je in arrays gespeichert.
1. Zeichne Alle Pflanzen
2. Zeichne den Schatten aller Pflanzen
3. Zeichne das Gras
Ein entsprechendes Umsortieren hat leider nichts geholfen.
Zuletzt geändert von Elladan am So Jul 24, 2005 12:50, insgesamt 1-mal geändert.
Eine Möglichkeit ohne OpenGL wäre:
Du speicherst die Schatten der Bäume in ein 2D-Array. Sobald du dann irgendwo ein Büschel Gras hinpflanzt, schaust du vorher im Schatten-Array nach, wie stark an dieser Stelle der Schatten ist. Somit kannst du dann dein Grasbüschel entsprechend einfärben.
Mit OpenGL könntest du das evtl. über projezierte Texturen lösen.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: So Feb 06, 2005 17:29 Beiträge: 187
Programmiersprache: C, C++
Hier kommt mein Senf dazu:
Also mir ist im Moment auch keine bessere Lösung als Frase im Kopf. Wär zwar bissl grob (je nachdem wie groß deine "Grasbüschel" sind), aber sähe sicher besser aus als auf dem Bild, wo alles Gras hell ist. Andererseits würde mich die genauere Lösung mit projektierten Texturen als Schatten auch interessieren, ich hab nur keine Ahnung wie man das dann macht mit auf den Rest der Szene und das Gras draufprojezieren.
Werde das hier mal weiterverfolgen. A propos: Ich finde auch das dat ned schlecht aussieht
Nebenbei bemerkt: Bis auf die Fliegenpilze schaut das Ganze recht atmosphärisch aus... Der Nebel da hinten hat was... Wenn du das ganze noch ein bisschen dunkelblau einfärbst bekommst du einen schön schaurigen Wald...
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Das mit dem Blending wäre natürlich eine elegante Lösung, habe ich auch schon zuvor mit herumexperementiert.
Hat vielleicht noch jemand eine Idee dazu? *bitte*
Frase hat geschrieben:
Nebenbei bemerkt: Bis auf die Fliegenpilze schaut das Ganze recht atmosphärisch aus... Der Nebel da hinten hat was... Wenn du das ganze noch ein bisschen dunkelblau einfärbst bekommst du einen schön schaurigen Wald...
Danke, danke.
Die Atmosphäre wird durch eine entsprechende Geräuschkulisse (Musik + zufällige Vogelstimmen) noch ausgebaut.
Das ganze Spiel basiert -als Idee- eigentlich auf dem "Tutorial Nr.4 - Alphamasking" von Sascha.
Mal abwarten, vielleicht poste ich das Spiel irgendwann als Projekt.
Wenn Interesse besteht, kann ich noch ein paar screenshots posten
Also: In halbwegs aktuellen Spielen werden mit Projected Textures grafische Leckerbissen erzeugt, indem z.B. der Schatten eines Baumes auf den Spieler geworfen wird. Wenn sich der Spieler bewegt, fliest der Schatten gewissermasen um den Spieler herum. Schaut also sehr echt aus... Splinter Cell macht das zum Bleistift so.
Nebenbei: Such mal im Forum nach der Demo "The Valley" oder so ähnlich. Da wird ein Tal mit Gras und Bäumen dargestellt. Und speziell das Gras wird nach einer ähnlichen Methode eingefärbt, wie ich sie vorgeschlagen habe. Nur dass als Basis zum Einfärben halt nicht nur der Schatten der Bäume verwendet wird, sondern auf die Untergrundfarbe. Das schaut in der Tat ein bisschen grob aus, läuft dafür aber recht flott und es schaut trotzdem immer noch recht geil aus
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
sieh dir zu schatten am besten mal im wiki shadowvolumes und shadowmapping an.
soweit ich weiß werden projective shadows wohl eher nich verwendet.
ansonsten einfach die schatten rendern und die zur position gehörige farbe zB über readpixel auslesen und für das gras benutzen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das schöne an projektiven Schatten ist, dass man sie vorberechnen kann. Blöd dabei ist, dass bei großen Szenen die Auflösung des Schattens bald die Qualität beschränkt. Außerdem drückt diese Methode bisl auf die Renderbremse, da man ohne shader nur mit Multipass die Schatten suabern kann. Wobei das wohl auf alle Schattenverfahren zutrifft.
Wo war eigentlich so richtig der Unterschied zwischen Shadow Mapping und Projektiven Schatten? War das nicht das selbe? (Konnte das nie richtig auseinander halten...)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Mo Feb 24, 2003 18:19 Beiträge: 165 Wohnort: Cologne
ich denke die idee mit dem blending eignet sich recht gut für diese art von rendering. Du müsstest lediglich die Objekte nach Höhe sortieren (Boden, Gras, Pilze, Bäume), und dann von jedem Objekt zuerst einmal den Schatten zeichnen, danach das Objekt an sich. Je nachdem solltest du warhscheinlich GL_DEPTH_TEST beim schatten-zeichnen ausmachen, damit sich dieser auch über die davor gezeichneten objekte legt. ich glaube so könnte es klappen
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.