7

我认为仅使用 SpriteBatch 中的颜色设置是不可能的,所以我正在尝试制定一个简单的着色器,它将每个像素都设为白色,同时尊重像素的 alpha 值。

Joel Martinez 给出的答案看起来是对的,但是当我用 SpriteBatch 绘制精灵时,我该如何结合呢?

4

5 回答 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 值返回全白色。

于 2008-09-17T13:38:31.090 回答
1

If you want to use custom shaders with SpriteBatch, check out this sample:

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

于 2008-09-17T19:55:38.907 回答
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 的默认着色器换成您自己的。使用它会使 sprite 的绘制速度变慢一些,因为 sprite 不会在一次绘制调用中批量处理,但我认为您不会注意到其中的区别。

于 2008-09-23T18:20:36.297 回答
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

玩得开心

于 2008-09-17T18:25:18.000 回答
0

我还没有编写自己的像素着色器,主要是从网上修改过的样本,你会做的是你会分别增加像素中 R、G、B 分量的值,只要它们低于 255,这将逐渐将精灵的颜色变为白色。嘿,押韵。

于 2008-09-17T13:13:03.087 回答