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

Aktuelle Zeit: Mo Jul 14, 2025 22:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Decal Projektion
BeitragVerfasst: Di Jan 31, 2012 08:07 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moinsen,

ich hab mal eine Frage wie man genau Decals in die Szene projeziert. Wie genau definiert man die Position und ausrichtung des Projektors? Müsste ja immer irgendwie 90° zur gewählten Weltposition sein? So ins blaue würd ich schätzen das da die Normale noch eine Rolle spielt. Hab schon bissl gesucht doch noch kein Beispiel gefunden.

Grüße
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Di Jan 31, 2012 09:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Bin mir grad nicht sicher ob du Lichter oder den Partikeleffekt meinst. Beim Licht nutzt man einfach die relative Lichtrichtung als Texturkoordinaten.
Für die Partikel gibt es unterschiedliche Ansätze in jeden Fall musst du aber erst berechnen welche Oberflächen du bearbeiten willst.
Das einfachste ist es nun diese Oberflächen mit entsprechenden Blendoptionen,Texturcoordinaten und Wiederholungsmodus einfach
noch einmal zu zeichnen. Etwas schwieriger ist das sogenannte Stainmapping. Hier hast du wie bei Lightmaps Texturen die deine Oberflächen
umhüllen, und zeichnest deine Decals einfach dort rein. Beide Methoden haben ihre Vor und Nachteil. So hast du zwar bei der ersten Methode
eine ziehmlich hohe Qualität aber dafür ist es bei der zweiten egal wie viele Decals du zeichnest und du hast die Pixeldaten vor dem Vertexshader.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Di Jan 31, 2012 09:41 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@yunharla: Zumindest deine Frage lässt sich beantworten: Weder Lichter noch Partikel, sondern Decals.

Das Prinzip wird nicht anders sein als bei projezierten Schatten.
Wenn das hier jemand erklären könnte, wäre es nett wenn ihr mit erklärt wie man diese Informationen am besten in der Szene speichert. (Also "wo" sind Blutflecken/Löcher etc.)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Di Jan 31, 2012 10:06 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ja es geht um Decals, keine Lichter :)
Das Prinziep muss ja gleich sein wie bei einer Lichtprojektion. Ein Decal dürfte nicht mehr infos haben wie die 3D - WeltPosition, also genau auf der Fläche. Also ich Pick mir dir 3D-Mausposition und erzeuge mir dort ein neues Decal. Ich müsste nur wissen wo sich der Projektor befindet. Gerichtet wäre er ja genau auf die position des decals (gluLookAt). Über die Projektionsmatrix könnte man ja die größe skalieren..
Doch wie bekomm ich die Position des Projektors?

Humus hat ja hier sowas gemacht: http://www.humus.name/index.php?page=3D&ID=83
Aber steig da nicht richtig durch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Di Jan 31, 2012 16:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Da gabs wohl nen missverständniss, ich zähl Decals immer zu Partikel weil sie ja letztenendes vom Partikelsystem erzeugt werden.... naja wie auch immer.
Ich würde dir von der Projektion deiner Decals abraten und dir empfehlen lieber eine der genannten Methoden zu verwenden. Projektion würde letztenendes nur
Vorteile in einer einfachen und vor allen statischen Szene bieten (wobei auch hier die anderen Verfahren schneller wären...). Ansonsten würdest du eine ganze Reihe an Mehraufwand haben um alle Probleme dabei zu
eleminieren (schon alleine einfache Sachen wie Verdeckung).

Übrigens das was man dort bei Humus sieht ist ein sehr schlechter Ansatz. Denn es braucht in jedenfalle mehr Speicher und ist langsamer als z.B. Stainmapping (womit man selbst auf ner kack 3dfx Karte unendlich viele Decals zeichnen kann). Außerdem funktioniert es ebenfalls nicht mehr bei Animationen :P

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Di Jan 31, 2012 18:09 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
nun da ich eh eine Deferred Shading Pipeline habe, denk ich das Projektion vielleicht doch nicht allzu dumm ist...Wollte da eigentlich keine Wissenschaft draus machen.. Lediglich paar Details in die Szene bringen ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Di Jan 31, 2012 22:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Thmfrnk hat geschrieben:
nun da ich eh eine Deferred Shading Pipeline habe, denk ich das Projektion vielleicht doch nicht allzu dumm ist...Wollte da eigentlich keine Wissenschaft draus machen.. Lediglich paar Details in die Szene bringen ;)


so Wissenschaftlich ist das garnicht in kurz: Du müsstest auf forward Rendering setzen da dir, bei einen Decal, die Tiefenwerte ja föllig egal bzw sogar hinderlich sind. Ansonsten wirst du nicht nur deine Decals auf falsche Flächen zeichnen sondern du würdest auch eine ganze Ecke an Vielfalt verlieren (z.B. bei der Art der Mischung, Überlappung von Decals.....)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Mi Feb 01, 2012 08:11 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
versteh ich überhaupt nicht. Ob ich nun mein Licht projeziere oder eine Decal Textur, wo ist der unterschied? Warum Tiefe hinterlich? Decals die von anderen Objekten verdeckt werden sieht man ja auch nicht. Ich denke man müsste den Projektor 90° über der Position des Decals Positionieren und drauf projezieren. Kann man dazu nicht einfach die Normale an der Position nutzen? In meinem Deferred Pass hab ich doch am Ende die 3D Position und die Normale. ForwardRendering kommt mir nicht ins Haus :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Do Feb 02, 2012 20:47 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
yunharla hat geschrieben:
Da gabs wohl nen missverständniss, ich zähl Decals immer zu Partikel weil sie ja letztenendes vom Partikelsystem erzeugt werden.... naja wie auch immer.


Das musst du mal kurz erklären. Was haben Partikel mit Decals zu tun?
Partikel sind vergängliche, animierte Kleinteile im freien Raum.
Decals sind dauerhafte oder mindestens temporäre statische Abbildungen auf Oberflächen.

Wie passt das zusammen?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Do Feb 02, 2012 21:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Flash hat geschrieben:
yunharla hat geschrieben:
Da gabs wohl nen missverständniss, ich zähl Decals immer zu Partikel weil sie ja letztenendes vom Partikelsystem erzeugt werden.... naja wie auch immer.


Das musst du mal kurz erklären. Was haben Partikel mit Decals zu tun?
Partikel sind vergängliche, animierte Kleinteile im freien Raum.
Decals sind dauerhafte oder mindestens temporäre statische Abbildungen auf Oberflächen.

Wie passt das zusammen?


Wenn du z.B. ne Rackete abfeuerst entsteht ein Decal an der Selben stelle wie die Explosion... ;)
Ich weiß blah keks ist nicht immer so .... who cares? :D

Thmfrnk hat geschrieben:
versteh ich überhaupt nicht. Ob ich nun mein Licht projeziere oder eine Decal Textur, wo ist der unterschied? Warum Tiefe hinterlich? Decals die von anderen Objekten verdeckt werden sieht man ja auch nicht. Ich denke man müsste den Projektor 90° über der Position des Decals Positionieren und drauf projezieren. Kann man dazu nicht einfach die Normale an der Position nutzen? In meinem Deferred Pass hab ich doch am Ende die 3D Position und die Normale. ForwardRendering kommt mir nicht ins Haus :D


Der Unterschied ist das du beim Licht ein homogen gefülltest Volumen definiert hast und bei Decals eine nicht homogen gefüllte Fläche innerhalb eines bestimmten Polygons. Soll heißen, deine Tiefenwerte bleiben nur korrekt solange sie von einer Projektionsebene die parallel zu diesen Polygon liegt ausgehen. Ansonsten machen dir die Parallaxen, im wahrsten Sinne des Wortes, einen Strich durch die Rechnung (lol komm ders gut). Da der Abstand von Projektionsebene zur Ebene des Polygons immer gleich bleibt, sind damit auch deine Tiefenwerte sinnlos und, sofern sie nicht 0 sind, sogar durch ihre limitierte Präzision hinderlich. Also nimmst du am besten gleich die Ebene von diesen Polygon. Anschließend musst du noch die Punkte bestimmen die innerhalb der Eckpunkte liegen. Man will ja schließlich nicht den Decal auf alle Punkte der Selben Ebene zeichen ;)

Fazit: der einzige Unterschied ist das du eine ganze Ecke von Optimierung der Vertexdaten auf die CPU auslagern müsstest. Und dein Shader an sich schon etwas langsamer wäre.... Diese Leistungseinbußen würde ich persöhnlich lieber in impliziete Pixeldaten der Decals investieren dann kann man sie nämlich hübsch skalieren :D

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Sa Feb 04, 2012 10:56 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Ich meinte licht nicht im Sinne von Punktlichter o.ä. Sondern projezierte Texturen (deferred). Genauso kann ich doch den gleichen Pass für die Deacals nutzen, allerdings mit einer ortho Projektion?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: So Feb 05, 2012 21:55 
Offline
DGL Member

Registriert: Di Aug 09, 2011 07:33
Beiträge: 163
Programmiersprache: C/C++
Wenn ich denn mal hier auch mal eine Frage stellen darf: Was wäre denn die effektivste Möglichkeit die Position für ein decal zu bestimmen?

Aktuell mache ich es wie folgt:
Für jedes Dreieck in der Szene erstelle ich eine Ebene mit dem Kreuzprodukt. Aus meiner Kamera-Position + Forword Vektor habe ich eine Gerade wodurch ich dann den Durchstoßpunkt Gerade Ebene ermittle. Ist das getan, überprüfe ich noch ob der Durchstoßpunkt im Dreieck liegt. Klappt zwar ehrlich gesagt gut aber wenn ich mir die Performance angucke, dann ist das doch alles crap :P
Man stelle sich eine Szene mit 500.000 Polys vor. Da bei jedem einzelnem Dreickeck die ganzen Sachen durchgehen ist schon ein enormer Aufwand.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Mo Feb 06, 2012 09:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Naja ist ja nur die Erstellung in deinen Fall von daher sollte es nicht sooo Stark ins Gewicht fallen. Wenn dein Baum aber an sich zu Lange zum durchlaufen braucht solltest du mal über k-d Bäume nachdenken.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Mo Feb 06, 2012 09:14 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Ich möchte mich auch mal einmischen. :)

Ich habe die Diskussion jetzt schon ein paar Tage beobachtet, für mich ist die eigentliche Fragestellung noch völlig unklar.
Und mir kommt es so vor, als ob hier einige völlig aneinander vorbeireden.

Vielleicht sollte man erstmal den genauen Verwendungszweck des Gewünschten bzw die Definition von Decals klarstellen?

Für mich sind Decals relativ kleine, dynamisch erzeugte Objekte (meist Quads) wie etwa Einschusslöcher, Fussabdrücke etc. , die ausserdem noch eine relativ geringe Lebenszeit haben (sieht man in jedem aktuellen Spiel, dass die Dinger nicht ewig an den Wänden kleben). Insofern kommt dabei das Handling durch ein Partikelsystem am ehesten in Frage.
Und zur Berechnung wird dazu nur eine Position und die Normale benötigt.
Natürlich kann man den Begriff Decal auch auf andere Transparente Objekte ausweiten, z.B. Kratzer auf dem Boden, abgeplatzter Putz auf Wänden oder Graffiti. Allerdings haben solche Objekte keine beschränkte Lebenszeit und werden in der Regel auch nicht dynamisch über die Szene verteilt. So etwas gehört dann IMHO direkt in die Szene, als statische Geometrie.

Zitat:
Man stelle sich eine Szene mit 500.000 Polys vor. Da bei jedem einzelnem Dreickeck die ganzen Sachen durchgehen ist schon ein enormer Aufwand.

Da wäre sicherlich die Verwendung eines Scenegraph ratsam um mögliche Kollisions-/Intersektionsberechnungen gering zu halten.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Decal Projektion
BeitragVerfasst: Mo Feb 06, 2012 10:35 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
genau, also mir kommt es eher auf die statische Variante an. Ich möchte halt rel. einfach statische Detaileffekte in die Szene bringen. Wie z.b. Fitzen auf dem Boden, Dreck an den wänden oder sonstiges.. Problem ist aktuell das ich noch kein gescheites Austauschformat gefunden habe, welches Multitexturing unterstützt (nutze aktuell 3ds files). Daher wollte ich diese Effekte in meinem Welteditor einbringen. Ich dachte da an Projektion um auch auf komplexe Szenerie rel. einfach so einen Effekt zu pappen. Auch die Anzahl der "Decals" wäre nicht so hoch, vielleicht 5-10 Stk.

Bei einer normalen Projektion hab ich aber grad bedenken, da ich ja hier auch eine Schattenberechnung mit einbauen muss, damit ich nicht auf dahinter liegende Objekte projeziere.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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