C# 渲染每个场景的目标,用于变换

C# 渲染每个场景的目标,用于变换,c#,xna,transition,scene,C#,Xna,Transition,Scene,我试图提出一个过渡的一般概念,而不必在实际场景中包含任何特定的代码。到目前为止,在我所看到的所有样本中,场景本身就能处理这些东西。与淡入/淡出类似,场景必须调整其绘制方法以获得正确的透明度。但这不仅会让每个场景都很烦人,因为有多种类型的转换,你很快就会得到乱七八糟的代码 所以我一直在想。我能想到的唯一方法是支持这一点,以及更复杂的过渡,而不在场景本身中处理它,是每个场景的渲染目标。在调用draw方法之前,将从场景管理器中设置渲染目标。绘制后,渲染目标将重置为管理器的渲染目标,场景的纹理将使用有关

我试图提出一个过渡的一般概念,而不必在实际场景中包含任何特定的代码。到目前为止,在我所看到的所有样本中,场景本身就能处理这些东西。与淡入/淡出类似,场景必须调整其绘制方法以获得正确的透明度。但这不仅会让每个场景都很烦人,因为有多种类型的转换,你很快就会得到乱七八糟的代码

所以我一直在想。我能想到的唯一方法是支持这一点,以及更复杂的过渡,而不在场景本身中处理它,是每个场景的渲染目标。在调用draw方法之前,将从场景管理器中设置渲染目标。绘制后,渲染目标将重置为管理器的渲染目标,场景的纹理将使用有关当前过渡的信息绘制。如果需要绘制更多的场景,则不清除“管理器”纹理,会出现更多场景。通过这种方式,您几乎可以做任何事情(转换方面),场景将彼此完全独立,并且在实际场景中不需要一行转换代码。(作为参考,我希望能够使用各种过渡类型。不仅可以淡入淡出,还可以使用着色器效果,在当前场景被“推离”时移动一个场景,等等,涉及一个或多个场景。)


这是我的理论。我的问题来了:这听起来像是一个可行的计划吗?这是路吗?我已经读过关于过于频繁地切换渲染目标时的性能问题,以及其他问题,这是我对实现此功能犹豫不决的主要原因。但到目前为止,我还没有想到或找到更好的方法。虽然我认为这不会有什么不同,但目前我只关心2D(以防万一)。这通常是一种合理的方法,但要注意渲染目标切换成本。另外,如果每个场景在过渡时都要设置动画,那么您将同时将两个场景渲染为两个不同的渲染目标,然后在屏幕上合成结果。

您的第二句话是什么意思?如果我有两个可见的场景,它们都会被绘制到它们的纹理上,然后被绘制到管理者的纹理上。是的,这就是我所说的——尽管合成可以直接进入后缓冲区,而无需添加另一个屏幕大小的渲染目标。不幸的是,没有,因为我希望能够进行屏幕快照^^