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

Aktuelle Zeit: Fr Jul 18, 2025 08:10

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



Ein neues Thema erstellen Auf das Thema antworten  [ 34 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Schatten "speziell"
BeitragVerfasst: Sa Jul 23, 2005 19:51 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 10, 2005 14:08
Beiträge: 15
Hallo Forum, danke an Phobeus :D

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:

Bild

Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 23, 2005 20:29 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
EDIT: alles falsch..... sry. besser zuerst bilder ansehen, dann posten... argh.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 23, 2005 21:37 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
DU solltest Schatten nach Grass zeichnen.
Code:
  1. glBlendFunc(GL_ONE, GL_ONE);

_________________
"Meine Mutter sagt : 'Dumm ist der, der Dummes tut'." - Forrest Gump


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 11:21 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 10, 2005 14:08
Beiträge: 15
Entschuldige, aber kannst du das nochmal etwas genauer audrücken, an welcher Stelle ich jetzt Blenden soll?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 11:49 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
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? :?

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 12:09 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 12:14 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 10, 2005 14:08
Beiträge: 15
Speedmaster hat geschrieben:
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 :oops:
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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 12:37 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 17:43 
Offline
DGL Member
Benutzeravatar

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 :wink:

_________________
Flummi: Projektseite und Projektthread


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 18:41 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 19:43 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 10, 2005 14:08
Beiträge: 15
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 20:00 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Wie wär's mit einem Screensaver zum Entspannen?

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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jul 24, 2005 23:26 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 25, 2005 00:05 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 25, 2005 12:15 
Offline
DGL Member
Benutzeravatar

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 ;)

_________________
www.omfg.biz - aktuelles projekt


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


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 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 | 16 Queries | GZIP : On ]