代码之家  ›  专栏  ›  技术社区  ›  Iain

如何在XNA中将雪碧染成白色?

  •  6
  • Iain  · 技术社区  · 17 年前

    我认为这不可能仅仅使用spritebatch中的颜色设置,所以我试图设计一个简单的明暗器,在考虑像素的alpha值的同时,将每个像素都变成白色。

    Joel Martinez给出的答案看起来是对的,但是当我用SpriteBatch画精灵时,我该怎么做呢?

    5 回复  |  直到 17 年前
        1
  •  3
  •   Joel Martinez    17 年前

    我想这就是你要找的

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

        2
  •  1
  •   Adi    17 年前

    我从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

    玩得高兴

        3
  •  1
  •   Joel Martinez    17 年前

    如果要将自定义着色器与spritebatch一起使用,请签出以下示例:

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

        4
  •  1
  •   finalman    17 年前

    Joel Martinez确实是对的,你用SrimeT批量使用它,将效果加载到TuntWaleTeff:

    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不是在一个draw调用中成批生成的,但我不认为您会注意到这一区别。

        5
  •  0
  •   Neoaikon    17 年前

    我还没有编写我自己的像素着色器,大部分是来自网络的修改后的样本,你会做的是,在像素中分别增加R、G、B分量的值,只要它们小于255,就会逐渐将精灵的颜色移向白色。嘿,这首歌很押韵。