2010-11-04 75 views
0

我有一个纹理,我想在运行时修改它的alpha通道。
有没有一种方法来绘制纹理的alpha通道?
或者也许用另一个纹理替换通道?

谢谢,
SW。XNA - 渲染到纹理的alpha通道

+0

你想达到什么目的?你试图将哪些数据放入Alpha通道?有很多方法可以做到这一点,其中大部分都有性能影响。 – 2010-11-05 01:06:02

+0

我正在尝试在两个图像之间进行复杂的转换。我有一个可以产生流体效果的求解器,并且我需要这种流体作为纹理的Alpha通道。所以是的,性能是一个问题,因为我需要每帧更新这个频道,而且纹理很大。 – 2010-11-05 02:03:22

回答

2

好的,根据你的评论,你应该做的是使用像素着色器。您的源图像甚至不需要Alpha通道 - 让像素着色器应用Alpha。

实际上,您应该也可以在GPU上计算alpha通道的值(即:运行流体求解器)。

你的着色器可能是这个样子:

float4 main(float2 uv : TEXCOORD) : COLOR 
{ 
    float4 c = tex2D(textureSampler, uv); 
    c.A = /* calculate alpha value here */; 
    return c; 
} 

一个良好的开端将是XNA Sprite Effects样品。

有你在做什么,甚至类似的效果:
http://create.msdn.com/assets/cms/images/XNA_SpriteEffects_02_small.jpg

样品中的作用,从第二个纹理获取值的第一个纹理的alpha通道的计算读它时绘制。