我在 XNA 中工作,遇到了以下问题:我的目标是将许多不同的纹理绘制到纹理上,然后使用给定的 alpha 值将最终纹理绘制到屏幕上。
问题是我绘制的纹理是全屏的,并且填充了颜色而不是透明度,因此它遮挡了它后面的所有内容。
一切都是二维的,这是我的代码:
public void Draw(SpriteBatch sb)
{
if (opacity > 0)
{
gd.SetRenderTarget(formTexture);
gd.Clear(Color.Transparent);
for (int i=0; i<formItems.Count; i++)
{
((FormItem)formItems[i]).draw(sb);
}
sb.Begin(SpriteSortMode.Immediate, BlendState.Additive);
for (int i=0; i<formItems.Count; i++)
{
FormItem fi = (formItems[i] as FormItem);
if (fi.glow != null)
{
sb.Draw(fi.glow, new Rectangle((int) fi.location.X + fi.width/2 - fi.glow.Width/2, (int) fi.location.Y + fi.height/2 - fi.glow.Height/2, fi.glow.Width, fi.glow.Height), Color.White);
}
}
sb.End();
gd.SetRenderTarget(null);
sb.Begin();
sb.Draw(formTexture, new Rectangle(0, 0, gd.Viewport.Width, gd.Viewport.Height), Color.White*opacity);
sb.End();
}
}
formTexture 是一个 RenderTarget2D 对象,gd 是图形设备。这是 formTexture 的初始化方式:
formTexture = new RenderTarget2D(this.gd, this.windowWidth, this.windowHeight);