xna中的图像/矩形部分淡入淡出

时间:2011-03-02 01:23:47

标签: xna

如何在xna中部分淡化矩形或图像,如下所示:

enter image description here

我正在使用xna 3.1和SpriteBatch.Draw()。我需要它部分透明,所以我可以看到它背后的东西。

2 个答案:

答案 0 :(得分:1)

只是为了添加安德鲁的回答,没有编写着色器或新的批处理器,还有第三种(慢得多)的方法。只需使用Texture2D的GetData方法提取像素数据,在for循环中按照您想要的方式更改alpha值,然后使用SetData将其放回原处。如果你经常更改alpha值,这是做事情的可怕方式,但看起来你只想更改一次alpha值,所以在加载程序时你只会有额外的开销,之后一切都应该顺利进行。此外,如果您只对少量图像执行此操作,则性能差异几乎可以忽略不计。这里有一些代码可以帮助您入门:


Color[] texColors = new Color[myTexture.Width * myTexture.Height];
myTexture.GetData<Color>(texColors);
for(int i = 0; i < texColors.Length; i++)
{
  //change alpha values the way you want
}
myTexture.SetData<Color>(texColors);

答案 1 :(得分:0)

执行此操作的“正确”方法是停止使用SpriteBatch并手动绘制四边形或编写自己的精灵批处理器。这样您就可以单独控制顶点alpha值。

如果你想要一种快速,有点hacky的方法,可以在精灵批处理中添加一个自定义像素着色器。在此着色器中,将纹理坐标作为输入并使用它们来调制输出alpha。或者使用第二个纹理来调整alpha值。