![]() |
Re: Alphatransparent von Bildern bei Direct3D
Ich hab mit ZeroMemory etc. gearbeitet und trotzdem das. Ich hab die Befürchtung das ich beim erstellen/initialisieren des 3DDevice oder von IDIRECT3D9 etwas "falsches" angegeben habe.
|
Re: Alphatransparent von Bildern bei Direct3D
Du missverstehst mich. Ich meine nicht die Strukturen etc., die du übergibst, sondern ich meine die Renderstates, TextureStageStates usw. Die initialisierst du ja üblicherweise nicht selbst, sondern verlässt dich auf die Default-Werte.
|
Re: Alphatransparent von Bildern bei Direct3D
ich weiß schon was du meinst, und darauf verlasse ich mich schon nicht. Ich meinte nur das der Grund, warum es im alten Projekt nicht läuft, wohl eine andere Initialisierung des Devices war oder ich hab an irgend ner Stelle die Renderstates verstellt.
Naja, noch eine Anmerkung zu dem Alphablend. Mit dem D3DRS_ALPHABLENDENABLE kann man wunderschön halbtransparente Sachen darstellen. Allerdings muss man darauf achten das dinge die hinter den halbtransparenten gebilden stehen zuerst gezeichnet werden. Malt man erst die halbtransparente Fläche und danach erst danach das was dahinter steht sieht man an der halbtransparenten Stelle das durch was zum Zeitpunkt des Zeischnens dahinter war. Wenn der Alphakanal etwas zu 100% durchsichtig macht gibt es keine Probleme weil dann der Bildpunkt ganz weg gelassen wird. In diesem Zusammenhang ist dann die Verwendung von D3DRS_ALPHATESTENABLE auch ganz gut. Wie bereits erwähnt kann es bei halbtransparenzen unschöne Effekte geben. Mit ALPHATESTENABLE kann man dann dafür sorgen das nicht nur Pixel mit Alphawert 0 ausgelassen werden. So kann man festlegen das zum Beispiel alle Pixel ausgelassen werden wo der Alphawert kleiner 10 ist (das ist so transparent das es fast keinen unterschied macht ob man das pixel ganz weglässt oder blendet) |
Re: Alphatransparent von Bildern bei Direct3D
Zitat:
In deinem funktionierenden Code-Beispiel zeigst du sehr deutlich, dass du viele Renderstates und TextureStageStates eben nicht eingestellt hast. Wenn sie auf Default standen, prima, wenn sie irgendwoanders schon umgestellt wurden, Happy Bughunting. Also, wirklich, lieber einen Renderstate mehr passend einstellen als einen weniger, aber direkt hintereinander nach Möglichkeit, und nicht zwischen lauter DrawPrimitive-Aufrufen. Oder du speicherst den State immer, wenn du Änderungen machst, und stellst ihn anschließend wieder her. Was das Sortieren angeht, üblicherweise werden tatsächlich alle Primitives, die alpha-geblendet werden müssen, von hinten nach vorne gezeichnet. Was dummerweise genau das Gegenteil von dem ist, was man sonst macht, denn normalerweise zeichnet man von vorne nach hinten, weil durch den Z-Test eine Menge Overdraw ausgeschlossen wird. Andererseits braucht man sich z.B. bei Partikelsystemen, einer typischen Anwendung für massives Alphablending, nicht darum kümmern, weil man da additiv arbeitet (DESTBLEND = ONE), und damit die Reihenfolge wieder egal ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz