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

Aktuelle Zeit: Fr Jul 18, 2025 07:22

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Jun 03, 2010 08:31 
Offline
DGL Member

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

ich habe mehrere halbtransparente Objekte die sich überlappen. Das Problem hab ich mit dem entsprechendem Tutorial behoben, doch durch das mehrfache Rendern meiner Scene geht natürlich performance verloren.. Nun bin ich auf TPixelBuffer gestossen.. Ist es möglich meine Scene (ohne transparente Objekte) 1x in den Buffer zu rendern und dann nur den Buffer zusammen mit den Transparenten Objekten rendern?

Gibt es auch ein Beispiel zu dem TPixelBuffer tutorial?

Mfg,
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jun 03, 2010 09:42 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Du kannst ein Pixel Buffer Object als Textur verwenden und in voller Größe auf den Bildschirm zeichnen. Das ist richtig. Ich habe das Tutorial Blenden noch nicht ganz nachvollzogen, wenn die soliden Objekte im Anschluss gezeichnet werden, brauchst du mehr als eine einfache Textur. Du brauchst die Tiefe jedes 'soliden' Pixels (Z-Buffer-Wert) und die Information, ob das Pixel gezeichnet werden muss oder nicht [+Anti-Aliasing?] (Alpha) zusätzlich zur Farbe. Da es heute aber Alltag ist, dass man seine Szene in Puffer rendert und nachbearbeitet gibt es dafür die Frame Buffer Objects (Tutorial_Framebufferobject), die fast wie eine normale Textur funktionieren. In deinem Fall brauchst du also ein RGBA-Color-Attachment und ein Depth-Attachment.

Dann zeichnest du wie du schon sagst, die soliden Objekte ein Mal da rein und legst das statische Bild in jedem Frame über deine transparenten Objekte. Das geht auf alle Fälle mit einem einfachen PixelShader. Wenn das für dich keine Option ist, muss ich da passen. Vielleicht weiß jemand anderes mehr.

Wenn möglich poste doch mal einen kleinen Screenshot, der zeigt wie komplex die Szene ist. Vielleicht sind ja die transparenten Objekte alle vor/hinter den soliden oder ähnliches, was dann zu anderen Lösungen führt.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jun 03, 2010 11:09 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Nun meine Szene kann schon recht komplex werden. Meine Transparenten Objekte sind Scheinwerferkegel welche auch mal bis zu 50 an Zahl vorhanden sein können. Hier mal ein kleines Beispiel:
Dateianhang:
Aufzeichnen.JPG


ich bin mit OGL noch ziemlich am anfang, daher sind shader für mich noch recht kompliziert...


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jun 04, 2010 15:33 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Du musst deine Objekte in Z Richtung sortieren.
Dann renderst du zuerst alle soliden Objekte und "oben" drauf die transparenten von hinten nach vorne.
Bei 50 transparenten Objekten hält sich der Aufwand für's Sortieren in Grenzen. Wieso renderst du deine Szene überhaupt mehrfach?

_________________
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  
BeitragVerfasst: Fr Jun 04, 2010 16:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Das Problem wird aber richtig knifflig bei Überlappungen.
Wie hier bereits erwähnt, musst du deine Objekte ja sortiert zum Abstand der Kamera zeichnen. Überschneiden diese sich aber, wie in diesem Fall von zwei Strahlen/Röhren/oder so:
Code:
\  /
'x
/  \

Dann müsstest du die Objekte beim Zeichnen aufsplitten in Unterobjekte um die Zeichenreihenfolge weiterhin definierbar zu haben.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jun 04, 2010 18:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Dann müsstest du die Objekte beim Zeichnen aufsplitten in Unterobjekte um die Zeichenreihenfolge weiterhin definierbar zu haben.

Der Ansatz das ohne spiltten zu realisieren nennt sich Depth-Peeling. Einfach mal googlen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jun 05, 2010 01:51 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
..aber er hat doch schon eine Lösung nach Tutorial realisiert. Es geht um Diskolichter auf einer Bühne.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Jun 05, 2010 06:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
..aber er hat doch schon eine Lösung nach Tutorial realisiert.

Ja, man sollte den ganzen Thread lesen und nicht nur den letzten Post bevor man antwortet. :oops:

Wenigstens noch einen halbwegs sinnvollen Kommentar:
Zitat:
doch durch das mehrfache Rendern meiner Scene geht natürlich performance verloren..

Ich löse das meistens so, dass ich einmal eine Liste (Array) der sichtbaren Objekte generiere und dann nur noch diese Liste mehrfach abarbeite. Das spart dann zumindest redundante Sichtbarkeitsberechnungen auf der CPU.

_________________
Yeah! :mrgreen:


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


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]