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

时间:2020-03-05 18:58:47  来源:igfitidea点击:

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

乔尔·马丁内斯(Joel Martinez)给出的答案看起来很正确,但是当我用SpriteBatch绘制精灵时,该如何合并呢?

解决方案

回答

我还没有编写自己的像素着色器,大部分都是从网上修改的样本,我们要做的就是只要像素中的R,G,B分量分别小于255,就可以增加它们的值,逐渐将精灵的颜色移向白色。嘿,押韵。

回答

我认为这就是我们要寻找的

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

回答

我附上了MS的文档页面,如果按照所有步骤进行操作,则应立即启动并运行它。

http://msdn.microsoft.com/zh-cn/library/bb203872(MSDN.9).aspx

总结起来,我们需要创建并影响文件(结合上面的代码对于目的确实是正确的),将其添加到项目中,然后在源文件中加载它并在渲染期间使用它,如下所述。链接。

顺便说一句:我不太记得SpriteBatch(因为我选择编写自己的SpriteBatch,所以限制太多),但是正如我记得的那样,我们可能需要在发送到渲染的材质中设置效果。
无论如何,也许我们会在这里找到它:

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

还有一个高级代码,如果我们想到达那里:

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

玩得开心

回答

如果要在SpriteBatch中使用自定义着色器,请查看以下示例:

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

回答

乔尔·马丁内斯(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不会在单个绘制调用中进行批处理,但是我认为我们不会注意到其中的区别。