Registriert: So Jun 05, 2005 15:08 Beiträge: 39 Wohnort: Bei Bayreuth
Holla!
Ich hab da folgendes Problem:
Ich habe ein virtuelles Modell von einem Caport erstellt, habe aber ein Problem mit der Eckverglasung.
Da sollten zwei Scheiben sein, beide halbtransparent.
Leider zeigt es die aber nicht richtig an:
Außerdem:
Ich glaube, es liegt an der Reihenfolge in der ich die Flächen render, weiß aber nicht weiter HILFE
_________________ Geniale Menschen sind selten ordentlich, ordentliche selten genial (Albert Einstein)
Es liegt tatsächlich an der Reihenfolge, wie du die Objekte renderst. Im Blending-Tutorial findest du u.a. folgendes:
Zitat:
Wie alles hat auch das Blending einen kleinen Schönheitsfehler. Viele Leute denken immer wieder, dass auch beim Blending praktisch eine 3D-Welt existiert. Das ist jedoch falsch, da die Quelle ja im Frame-Buffer bereits vorliegt. Praktisch bereits fertig gerendert. Es macht also für das Blending einen enormen Unterschied, in welcher Reihenfolge die Objekte zur Kamera hin gerendert werden.
Würden wir zum Beispiel ein Haus mit einem Fenster render wollen und das Fensterglas mit Hilfe von Blending darstellen und wir würden zunächst das Glas rendern, so würde OpenGL dieses mit dem Hintergrund (vermutlich ne Himmel) blenden und dann anschließend das Haus drum herum zeichnen. Der ahnungslose Programmierer wird dann mit großen Augen vor dem Fenster stehen und sich wundern, wieso das Fenster so merkwürdig aussieht und man praktisch durch das Glas ins Freie sehen kann. Würden wir kein Blending haben, so würde es nicht weiter auffallen in welcher Reihenfolge wir die Objekte gerendert haben.
Darum gilt, alle Objekte rendern, bevor man zum Blending greift. Man sollte sich also durchaus Gedanken dazu machen, wie man seine Objekte rendert. Es gibt verschiedene Verfahren seine Objekte so ordnen zu lassen, dass das hier beschrieben Problem nicht auftritt, darauf möchte ich nicht näher eingehen, ihr seit gewarnt worden ;D Eigentlich ist es ein recht logischer Vorgang, allerdings erliegt man doch recht schnell diesem kleinen Irrglauben
Du solltest, wenn du deine halbtransparenten Objekte renderst, den Tiefentest entsprechend einstellen. IMHO hilft es, wenn du OpenGL anweist, vom Depth-Buffer lesend zuzugreifen, anstatt schreibend. Dann werden deine transparenten Objekte nämlich korrekt von anderen verdeckt, blenden im Gegenzug aber auch richtig.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Ähm nur so die Frage, auch wenn sie nicht hinpasst, aber kannst du mal andere Texturen nehmen?? Von den jetztigen bekomme ich Augenkrebs!
_________________ 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.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
@speedmaster: Jetzt wirste aber echt kleinlich.
tiefenbuffer: Es ist vielleicht einwenig ungünstig ausgedrückt. Sofern der Tiefentest an ist wird gelesen und sobald ein Tiefenbufer existiert wird in ihn geschrieben. Das Lesen könntest du verhindern in dem den Tiefentest deaktivierst und das Schreiben geht mit glDepthMask(GL_FALSE);. Nachdem du fertig bist solltest du das Schreiben auch wieder aktivieren. glDepthMask(GL_TRUE);
Registriert: So Jun 05, 2005 15:08 Beiträge: 39 Wohnort: Bei Bayreuth
Den hatte ich schon mit glDisable(GL_DEPTH_TEST) deaktiviert.
Blos wie kann ich
a.)
dafür sorgen, das nicht-transparente Flächen transparente überdecken ?
und
b.)
dafür sorgen das helle Flächen (weiße Wand) stärker überfärbt werden als dunklere (graue Decke) ?
_________________ Geniale Menschen sind selten ordentlich, ordentliche selten genial (Albert Einstein)
Ich würde gucken das du eine Renderbaum erstellst was du vermutlich eh noch machen musst.
Zum Thema Texturen:
Ich habe hier von meinem Team noch ca. 50 2048x2048er Texturen Rumliegen, falls also jemand interesse hat!
( Sind für den nachfolger unseres Spieles "Hidden Stroke 2" )
_________________ 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.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Grizzly hat recht. Zeichne zuerst alle massiven Flächen (Tiefentest an), dann sortier deine Flächen nach Tiefe und Blende die dann nacheinander ein, beginnend mit der am weitesten entfernten (ohne in den Tiefenpuffer zu Zeichnen).
Ein Problem was mit Tiefsortierten Flächen noch auftreten wird ist zu entscheiden, wann eine Fläche weiter hinten ist als eine andere. Ein Ansatz wäre Durchschnittswerte der Eckpunkte zu nehmen, oder aber den extremsten Wert. Da musst du sehn was für dich passt. Es gibt aber immer Sonderfälle, die dir die Optik ruinieren werden. Umgehen kannst du das zu einem gewissen Teil indem du den Tiefenpuffer bei den Transparenten Objekten nicht beschreibst. Ich bin mir aber sicher, es gibt trotzdem noch Fälle wo's blöd aussieht.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Wenn du das Schreiben des Tiefenbuffers unterbindest erreichst du den Fall, dass im Tiefenbuffer alle Informationen über undurchlässige Objekte gesammelt wurden. Die transparenten Objekte gliedern sich so ganz normal in die Szene ein. Befinden sich also teilweise hinter anderen Objekte. Hinterlassen selber aber nichts im Tiefenbuffer was dafür sorgt, dass gerenderte Objekte da praktisch nicht existieren. Wenn jetzt andere Objekte an diese Stelle gerendert werden richten die sich auch wieder nur an den undurchlässigen Objekten aus. Sie legen sich dann über andere Transparenten obwohl sie eigentlich dadrunter liegen sollten. Ist dann in etwa so als ob du den Tiefentest nur für die transparenten Objekte deaktivierst. Für alle anderen ist er aber noch an. Wenn der Tiefentest aus wäre würden sie sich komplett über alle Objekte legen.
Damit kannst du in einigen Fällen die aufwendige Tiefensortierung bei den Objekten weglassen. Funktioniert aber nicht immer, da es beim Blenden manchmal auf die Reihenfolge ankommt. Und dann muss man per Hand sortieren.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Genau. Das ausschalten des Tiefenpuffers hilft Kreuzungen von Durchsichtigen Objekten zu Rendern. Denn ein Teil wird immer verdeckt, wenn man den Puffer nicht schreibschützt. Ich würde beiden Kombinieren. Sortieren und Puffer ausschalten.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 19 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.