在XNA中如何将精灵着色为白色?

7

我认为仅使用SpriteBatch中的颜色设置不可能实现这一点,因此我正在尝试设计一个简单的着色器,可以将每个像素变为白色,同时保留像素的alpha值。

Joel Martinez提供的答案看起来是正确的,但我该如何在使用SpriteBatch绘制精灵时加入它呢?

5个回答

3
我想这正是你在寻找的内容。
sampler2D baseMap;

struct PS_INPUT 
{
   float2 Texcoord : TEXCOORD0;

};

float4 ps_main( PS_INPUT Input ) : COLOR0
{
   float4 color = tex2D( baseMap, Input.Texcoord );
   return float4(1.0f, 1.0f, 1.0f, color.w);
}

这很简单,它只是从纹理中采样颜色,然后使用纹理的 alpha 值返回全白色。


1

Joel Martinez说得没错,你可以这样使用它,使用SpriteBatch,并将效果加载到tintWhiteEffect中:

spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);

tintWhiteEffect.Begin();
tintWhiteEffect.CurrentTechnique.Passes[0].Begin();

   // DRAW SPRITES HERE USING SPRITEBATCH

tintWhiteEffect.CurrentTechnique.Passes[0].End();
tintWhiteEffect.End();

spriteBatch.End();

这里的诀窍是SpriteSortMode.Immediate,它允许您交换SpriteBatch的默认着色器为自己的着色器。使用它会使精灵绘制变慢一些,因为精灵不会在单个绘制调用中批处理,但我认为您不会注意到这种差异。


1

我附上了微软的文档页面,如果你按照所有步骤操作,很快就可以让它运行起来。

http://msdn.microsoft.com/en-us/library/bb203872(MSDN.9).aspx

总的来说,您需要创建并效果文件(包含上面的代码,这确实对您的目的是正确的),将其添加到您的项目中,然后在源文件中加载它,并在渲染期间按照链接中所述使用它。
顺便说一句:我不太记得SpriteBatch了(因为我选择编写自己的批处理程序,它太受限制了),但我记得您可能需要在发送到渲染器的材料中设置效果。 无论如何 - 也许您会在这里找到它:

http://creators.xna.com/en-us/utilities/spritebatchshader

如果你想达到更高级的代码水平:

http://creators.xna.com/en-us/sample/particle3d

玩得开心


1

0

我还没有编写过自己的像素着色器,大多数都是修改来自网络的示例。你要做的是分别增加像素中R、G、B组件的值,只要它们小于255,这将逐渐将精灵的颜色向白色转变。嘿,这押韵了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接