|
DirectX-Forum - Beitragsübersicht - |
|
Thema | DX9: 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 ] |
|
Letzte Aktualisierung: Sonntag, 13. Dezember 2015 |
|