我认为只使用SpriteBatch中的颜色设置是不可能的,所以我正在尝试制作一个简单的着色器,它会占用每个像素并使其成为白色,同时尊重像素的alpha值。 / p>
Joel Martinez给出的答案是正确的,但是当我使用SpriteBatch绘制精灵时,如何将其合并?
答案 0 :(得分: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 :(得分:1)
我附上了MS的文档页面,如果您按照所有步骤操作,则应立即启动并运行。
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
玩得开心
答案 2 :(得分:1)
如果要在SpriteBatch中使用自定义着色器,请查看此示例:
答案 3 :(得分: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的默认着色器。使用它会使精灵绘图有点慢,因为精灵不会在一次绘制调用中被批量处理,但我认为你不会注意到差异。
答案 4 :(得分:0)
我没有编写自己的像素着色器,大部分来自网络的修改样本,你会做的是你会分别增加像素中R,G,B组件的值,只要它们低于255 ,这会逐渐将精灵的颜色转向白色。嘿那个押韵。