我正在尝试制作一款基于XNA的小型游戏,我需要能够在屏幕周围的多个移动圈内绘制单个纹理,就像它们是“聚光灯”一样,可以显示更大图片的部分内容。 在寻找我能够做到这一点时,我发现模板可能能够帮助我实现这一目标,但我不知道如何使用模板来做到这一点。 如果有人对我如何做到这一点有任何信息或想法,我将非常感激。
编辑:我忘了提到游戏是2D。
答案 0 :(得分:1)
首先,您需要一个所需模板形状的网格,在本例中为圆形。 XNA不支持许多基元,因此您需要使用三角形近似圆。
接下来,您几乎正常渲染该网格,但使用:
graphics.DepthStencilState.DepthBufferFunction = CompareFunction.Never;
graphics.DepthStencilState.StencilEnable = true;
graphics.DepthStencilState.ReferenceStencil = 1;
graphics.DepthStencilState.StencilPass = StencilOperation.Replace;
现在你有一个带孔的模板。
然后,您通过模板渲染纹理,使用正常设置,但使用:
graphics.DepthStencilState.StencilEnable = true;
graphics.DepthStencilState.ReferenceStencil = 1;
graphics.DepthStencilState.StencilFunction = CompareFunction.Equal;
有关详情,请参阅DepthStencilState class的参考资料。
这是基于我对3D的了解。如果你想使用精灵,你可能需要做更多的事情。