Monogame:仅在指定区域内渲染

问题描述 投票:0回答:2

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

像这样:enter image description here

基本上允许我像往常一样绘制到缓冲区或texture2D,但实际绘图仅在此指定区域内发生,并且其外部的剩余像素保持不变。

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

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

c# monogame
2个回答
0
投票

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

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

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


0
投票

您可以使用:

spriteBatch.Draw(yourTexture,
    //where and the size of what you want to draw on screen
    //for example, new Rectangle(100, 100, 50, 50)//position and width, height
    destinationRectangle,
    //the area you want to draw from the original texture
    //for example, new Rectangle(0, 0, 50, 50)//position and width, height
    sourceRectangle,
    Color.White);

然后它只会绘制您之前选择的区域。希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.