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?
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.
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.
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"
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.
..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.
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.
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.