Monogame:仅在指定区域内渲染

时间:2018-12-27 12:03:48

标签: c# monogame

这可能是一个奇怪的问题,但是我试图找到一种方法,仅在特定的允许区域内而不是整个缓冲区/纹理内渲染精灵。

像这样: enter image description here

基本上可以像往常一样绘制缓冲区或Texture2D,但是实际绘制仅在此指定区域内进行,而其外部其余像素保持不变。

为什么需要这样做-我正在构建自己的UI系统,并且我想避免使用中间缓冲区,因为当屏幕上有许多UI组件时,它非常慢(并且每个组件都必须绘制自己的缓冲区才能使用)防止将子元素绘制在父边界之外。

只是要澄清-这都是为了简单的2D渲染,而不是3D。

2 个答案:

答案 0 :(得分:0)

如果您的UI实际上是使用SpriteBatch绘制的,则可以使用ScissorRectangle

GraphicsDevice.RasterizerState.ScissorTestEnable = true;
spriteBatch.GraphicsDevice.ScissorRectangle = ...

在3D中,您可以渲染到纹理并仅绘制纹理的一部分-或使用着色器(实际上,您可以仅将尺寸作为参数发送,如果Pixel不在该Rectangle中,则可以在PixelShader中将其设置为黑色(或您想要完成的任何事情)

答案 1 :(得分:0)

您可以使用:

ZoneId.systemDefault()

然后它将仅绘制您之前选择的区域。希望这会有所帮助!