DirectX-Forum - Beitragsübersicht -
ThemaDX9: 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 06. März 2009 um 16:11:56
Antwort Ich habe gerade eine interessante "Entdeckung" gemacht. Dazu erstmal noch weitergehende Informationen dazu, was ich überhaupt mache: Die Kreistextur wird nicht direkt in den BackBuffer gerendert, sondern erst in eine Textur (nachfolgend ZielTextur gennant):
'Erstellung der Zieltextur:
FoW = New Texture(D3DDevice, Karte.Width * 5, Karte.Height * 5, 0, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default)
'(...)
'Rendern der Kreistextur In die Zieltextur:
Dim Surf As Surface
Surf = FoW.GetSurfaceLevel(0)
D3DDevice.SetRenderTarget(0, Surf)
D3DDevice.Clear(ClearFlags.Target, Color.FromArgb(0, 0, 0, 0), 1, 0)
D3DDevice.BeginScene()
DSprite.Begin(SpriteFlags.AlphaBlend)
DSprite.Draw2D(texSicht, New Rectangle(0, 0, 256, 256), New SizeF(Sichtweite * 10, Sichtweite * 10), New PointF(0, 0), 0, New PointF(pos.X - Sichtweite * 5, pos.Y - Sichtweite * 5), Color.White)
'texSicht ist die Kreistextur
'Sichtweite ein Double, der die Sichtweite angibt
'pos ist ein Vector3, der die Position eines Objektes angibt
'Der Faktor 5 ist angegeben, weil die Zieltextur 5-mal so groß ist, wie die eigentliche Karte
DSprite.End()
D3DDevice.EndScene()
Damit sollte ja jetzt in der linken oberen Ecke der Zieltextur genau die Kreistextur sein.
Jetzt zu meiner Entdeckung:
Ich habe mal den BackBuffer nicht nach Schwarz gecleart, sondern nach weiß.
Wird nun nur die Kreistextur gerendert, bleibt alles weiß, so sollte es ja auch sein, da dann Weiß mit Weiß geblendet wird.
Wird nur die Zieltextur gerendert, bleibt ein schwarzer Rand. Hier ein Screenshot.
Liegt es vielleicht an irgendeinem falschen Texturformat?

Nico
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ]
Antworten
DX9: Halbtransparente Sprites überlagern - Nico 02. März 2009 um 14:20:12
Re: Halbtransparente Sprites überlagern - mdx 05. März 2009 um 00:16:29
Re: Halbtransparente Sprites überlagern - Nico 05. März 2009 um 11:02:45
Re: Halbtransparente Sprites überlagern - mdx 05. März 2009 um 23:32:34
Re: Halbtransparente Sprites überlagern - Nico 06. März 2009 um 16:11:56
Re: Halbtransparente Sprites überlagern - mdx 06. März 2009 um 22:18:00
Re: Halbtransparente Sprites überlagern - Nico 11. März 2009 um 15:09:44
Re: Halbtransparente Sprites überlagern - Nico 11. März 2009 um 15:17:51
Re: Halbtransparente Sprites überlagern - mdx 12. März 2009 um 00:15:29
Re: Halbtransparente Sprites überlagern - Nico 12. März 2009 um 12:20:12

Ihre Antwort
(Nick-)Name   Wichtige Informationen zur Namensangabe
E-Mail (opt.)  Wichtige Informationen zur Angabe einer eMail-Adresse
Thema   Wichtige Informationen zur Angabe eines Themas
Betrifft (IDE)  DirectX 9
Ihre Antwort
Smilies
Mehr...
FettKursivUnterstrichen   Übersicht der Tipp-KürzelÜbersicht der Projekt-KürzelÜbersicht der Bücher-Kürzel 
Homepage
Titel
Root-Smilies              
             
             
[ Zurück zum DirectX-Forum | Forum-Archiv | Forum-Hilfe | Chat ]

Zum Seitenanfang

Startseite | VB-/VBA-Tipps | Projekte | Tutorials | API-Referenz | Komponenten | Bücherecke | Gewinnspiele | VB.Net | .Net-Forum | DirectX | DirectX-Forum | Chat | Ausschreibungen | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 13. Dezember 2015