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 Nico
E-Mail nico.schertler@gmx.de
Datum 19. Januar 2009 um 11:12:08
Antwort Also ich hab das jetzt mal probiert.
Beim Initialisieren von DX hab ich folgendes reingenommen:
        D3DDevice.RenderState.StencilFunction = Compare.Always
D3DDevice.RenderState.ReferenceStencil = &H1
D3DDevice.RenderState.StencilMask = -1
D3DDevice.RenderState.StencilWriteMask = -1
D3DDevice.RenderState.StencilZBufferFail = StencilOperation.Keep
D3DDevice.RenderState.StencilFail = StencilOperation.Keep
D3DDevice.RenderState.StencilPass = StencilOperation.Replace
Und um in den StencilBuffer zu schreiben hab ich folgendes in jedem Frame:
        Dim saveSourceBlend = D3DDevice.RenderState.SourceBlend
Dim saveDestBlend = D3DDevice.RenderState.DestinationBlend
D3DDevice.RenderState.StencilEnable = True
D3DDevice.RenderState.ZBuffer Write Enable = False
D3DDevice.RenderState.SourceBlend = Blend.Zero
D3DDevice.RenderState.DestinationBlend = Blend.One
DSprite.Draw2D(Karte.Map, New PointF(0, 0), 0, New PointF(1 / 64 * W, 7 / 8 * H - 17 / 200 * H), Color.White)
D3DDevice.RenderState.SourceBlend = saveSourceBlend
D3DDevice.RenderState.DestinationBlend = saveDestBlend
D3DDevice.RenderState.ZBuffer Write Enable = True
Aber hier wird anscheinend in den BackBuffer gezeichnet. Alles was vorher an diese Stelle gezeichnet wurde, wird von der Textur überdeckt. Oder funktioniert das nicht mit Sprites?
Muss eigentlich der StencilBuffer mit DirectX initialisiert werden? Mir war so, als müsste das mit bei dem BackBuffer-Format mit angegeben werden. Bis jetzt siehts da bei mir so aus:
D3DDevice = New Device(0, DeviceType.Hardware, Target, CreateFlags.SoftwareVertexProcessing, GetParams())
...
Public Function GetParams() As PresentParameters
Dim presentParams As New PresentParameters()
With presentParams
.Windowed = False
.SwapEffect = SwapEffect.Discard
If Not .Windowed Then
.BackBufferCount = 1
.BackBufferFormat = Manager.Adapters(0).CurrentDisplayMode().Format
.BackBufferWidth = W 'Auflösungsbreite
.BackBufferHeight = H 'Auflösungshöhe
End If
.EnableAutoDepthStencil = True
.AutoDepthStencilFormat = DepthFormat.D16
End With
Return presentParams
End Function
Nico

P.S.: Warum kann ich eigentlich kein ZBuffer Write Enable schreiben?
[ 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