스텐실을 이해하려고합니다. 나는 그들이 어떻게 작동하는지 설명하는 좋은 자습서를 사용할 수 있지만 여기에 그 동안 내가 함께 일하고 있어요 무슨 :스텐실 이해 (XNA 4.0, Windows Phone 7)
가DepthStencilState _StencilAlways;
DepthStencilState _StencilKeepIfZero;
SpriteBatch _StencilBatch;
SpriteBatch _MaskBatch;
_StencilAlways = new DepthStencilState();
_StencilAlways.StencilEnable = true;
_StencilAlways.StencilFunction = CompareFunction.Always;
_StencilAlways.StencilPass = StencilOperation.Replace;
_StencilAlways.ReferenceStencil = 1;
_StencilAlways.DepthBufferEnable = false;
_StencilKeepIfZero = new DepthStencilState();
_StencilKeepIfZero.StencilEnable = true;
_StencilKeepIfZero.StencilFunction = CompareFunction.Equal;
_StencilKeepIfZero.StencilPass = StencilOperation.Keep;
_StencilKeepIfZero.ReferenceStencil = 0;
_StencilKeepIfZero.DepthBufferEnable = false;
RenderTarget2D MaskRenderTarget = new RenderTarget2D(device, Width, Height, false, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, 0, RenderTargetUsage.DiscardContents);
GraphicsDevice.SetRenderTarget(MaskRenderTarget);
GraphicsDevice.Clear(ClearOptions.Target | ClearOptions.Stencil, new Color(0, 0, 0, 1), 0, 0);
_MaskBatch.Begin(SpriteSortMode.Immediate, null, null, _StencilAlways, null);
_MaskBatch.Draw(
Texture,
Position,
null,
Shade,
0,
Vector2.Zero,
Scale,
SpriteEffects.None,
0);
_MaskBatch.End();
_StencilBatch.Begin(SpriteSortMode.Immediate, null, null, _StencilKeepIfZero, null);
_StencilBatch.DrawString(
_Font,
Line,
Position2,
Shade);
_StencilBatch.End();
_RenderedTexture = MaskRenderTarget;
GraphicsDevice.SetRenderTargets(null);
일부 전위/위생 오류가있을 수 있습니다 만, 어떤 아이디어는 내가 잘못을 뭘하는지?
이 답변과 App Hub 포럼에 게시하면 정말 어떻게 작동하는지 이해하는데 많은 도움이되었습니다. :) ** 큰 감사합니다! :) ** – Venemo