DirectX-Forum - Beitragsübersicht -
ThemaDX9: StencilBuffer
Von Nico
E-Mail nico.schertler@gmx.de
Datum 13. Januar 2009 um 14:13:07
Frage Hallo!

Ich versuche gerade, das Rendern eines Primitives auf einen rautenförmigen Bereich einzugrenzen, der als Textur auch vorliegt. Soweit ich ich, werden dazu doch StencilBuffer verwendet, oder? Also hab ich mir mal das Sample StencilMirror aus dem SDK angesehen. Dazu mal eine Frage:
Wer sagt denn dort DX, dass die Wasseroberfläche in der Sub RenderMirror in den StencilBuffer gerendert wird und nicht auf den Backbuffer. Ein anderes RenderTarget wird da ja nicht eingestellt.

Nico
Antwort:
Von mdx
E-Mail mdx@vb-fun.de
Datum 15. Januar 2009 um 19:38:34
Antwort Hi,
das geht recht einfach über Rendertstates. Zuerst enablest du den StencilBuffer und sagst was er machen soll
 
Device.RenderState.StencilEnable = True
Device.RenderState.StencilFunction = Compare.Always
Device.RenderState.ReferenceStencil = H1
Device.RenderState.StencilMask = -1
Device.RenderState.StencilWriteMask = -1

Device.RenderState.StencilZBufferFail = StencilOperation.Keep
Device.RenderState.StencilFail = StencilOperation.Keep
Device.RenderState.StencilPass = StencilOperation.Replace
Danach disablest du den ZBuffer und stellst das Blending so ein, dass der Backbuffer nicht verändert wird:
Device.RenderState.ZBuffer Write Enable = False
Device.RenderState.AlphaBlendEnable = True
Device.RenderState.SourceBlend = Blend.Zero
Device.RenderState.DestinationBlend = Blend.One
Jetzt kannst du rendern was du möchtest, der Backbuffer bleibt immer gleich.
Im Source wird jetzt der Fluß gerendert. Der Stencil hat jetzt ein Maske des Flusses erstellt.
Dann wird die ganze Szene gespiegelt und mit neuen Renderstate Settings gegen die Maske gerendert.

Tritt bei einem Pixel "Device.RenderState.StencilFunction = Compare.Equal" auf, wird es mit dem Backbuffer
geblendet, sonst eben nicht.

Im Prinzip renderst du die gespiegelte Szene gegen eine Maske. Alle Bereiche die zulässig sind, werden mit dem
Backbuffer geblendet.

Gruß MDX
[ Antwort schreiben | Zurück zum DirectX-Forum | Forum-Hilfe ]
Antworten
DX9: StencilBuffer - Nico 13. Januar 2009 um 14:13:07
Re: StencilBuffer - mdx 15. Januar 2009 um 00:38:18
Re: StencilBuffer - Nico 15. Januar 2009 um 14:39:54
Re: StencilBuffer - mdx 15. Januar 2009 um 19:38:34
Re: StencilBuffer - Nico 19. Januar 2009 um 11:12:08
Re: StencilBuffer - mdx 19. Januar 2009 um 19:36:10
Re: StencilBuffer - Nico 19. Januar 2009 um 19:43:46
Re: StencilBuffer - mdx 22. Januar 2009 um 17:37:36
Re: StencilBuffer - Nico 23. Januar 2009 um 15:37:59
Alles klar - Nico 23. Januar 2009 um 18:41:51
Re: Alles klar - mdx 23. Januar 2009 um 19:59:02
Re: StencilBuffer - mdx 19. Januar 2009 um 20:58:47
Code - Nico 15. Januar 2009 um 14:48:39

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