|
DirectX-Forum - Beitragsübersicht - |
|
Thema | DX9: Halbtransparente Sprites überlagern |
Von |
Nico |
E-Mail |
nico.schertler@gmx.de |
Datum |
02. März 2009 um 14:20:12 |
Frage |
Hallo!
ich habe eine Kreistextur mit ausgeblendetem Rand, also die Transparenz der Pixel wird nach außen immer größer. Mit dem Sprite-Objekt soll diese versetzt gezeichnet werden. Theoretisch sollte da zum Beispiel folgendes rauskommen. Ich hoffe, es lässt sich so einigermaßen erahnen. Sollen jedenfalls zwei der Texturen nebeneinander sein. Innerhalb der Kontur sollte auch alles weiß (die Textur ist komplett weiß) sein. - - / \/ \ / \ | | \ / \ /\ / - - Wenn ich das aber zeichnen lasse ist allerdings der komplette Rand der zweitgezeichneten Textur sichtbar, aber nur der halbtransparente Teil. Der volltransparente Teil bleibt weiß: - - / \/ \ / / \ | | | \ \ / \ /\ / - - Gezeichnet wird so:D3DDevice.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 0, 0), 1, 0) D3DDevice.BeginScene() DSprite.Begin(SpriteFlags.AlphaBlend) For Each o As clsObjectBase In Objects o.DrawSichtweite() Next DSprite.End() D3DDevice.EndScene() AlphaBlending ist im gesamten Projekt aktiviert. Es scheint ja so, als würde das Blending mit dem Hintergrund vorgenommen werden, anstatt mit dem Pixel, das schon da ist (bei der zweitgezeichneten Textur). Hab ich da irgendeinen Denkfehler? Wie kann ich das Problem umgehen?
Nico |
|
Antwort: |
Von |
Nico |
E-Mail |
nico.schertler@gmx.de |
Datum |
12. März 2009 um 12:20:12 |
Antwort |
Hilft auch nichts. Ich hab jetzt mal die Sub, die das Zeichnen der Kreistexturen übernimmt nicht in die Textur zeichnen lassen, sondern auf den BackBuffer. Da funktionierts. Der Ablauf des Programmes ist folgender:Sub Render (wird In jedem Frame aufgerufen) Aufrufen Sub Sichtweite_Zeichnen Zieltextur zeichnen End Sub Sub Sichtweite_Zeichnen Setze Textur als Rendertarget Für jedes Objekt auf der Karte Objekt.ZeichneEigeneSichtweite End Für Setze wieder BackBuffer als Rendertarget End Sub Sub Objekt.ZeichneEigeneSichtweite Zeichne Textur als Sprite an entsprechende Stelle End Sub Die Zieltextur markiert also die sichtbaren Stellen auf der Karte. Die Ausgabe auf dem Bildschirm ist nur zu Debug-Zwecken. Demzufolge ist auch eine Texturtransformation nicht möglich, oder? Die BackBuffer-Surface muss sich also irgendwie von der Textur-Surface unterscheiden, denke ich mal. Die Textur-Surface wird so erstellt:Dim Surf, saveBackbuffer As Surface Surf = FoW.GetSurfaceLevel(0) 'FoW ist der Name der Zieltextur saveBackBuffer = D3DDevice.GetRenderTarget(0) D3DDevice.SetRenderTarget(0, Surf) D3DDevice.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 0, 0), 1.0F, 0) D3DDevice.BeginScene() '... D3DDevice.EndScene() D3DDevice.SetRenderTarget(0, saveBackbuffer) saveBackbuffer.Dispose() Surf.Dispose() Nico |
|
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|