我怎样才能学习写一个着色器

所以这是背景:

我正在写一个游戏,只是为了我自己的娱乐和教育。 我已经得出结论,XNA是去graphics的方式,我已经买了几本书,我已经得到了基本的游戏graphics,这很好。

现在我开始深入一点了,我开始需要做我的(初学者)书没有涵盖的东西。 特别是,我需要使用掩码显示一个精灵。 实际上,我需要做的是为每个玩家显示不同颜色的通用精灵。 在networking上敲打之后,似乎要走的路线是使用蒙版显示颜色纹理(每个玩家一个),然后显示精灵的通用部分。 这必须dynamic完成,即在运行时,因为如果我尝试在启动时生成所有排列,则会有太多的精灵保存在内存中。

所以,我需要使用着色器。 精细。 我已经下载了一个示例着色器程序,并设法用锤子击中它,直到它做足够接近我想要的东西,以便我知道我在正确的轨道上。 在这里,我们来到我的问题…我不知道我在做什么。 虽然有很多关于着色器的例子,但实际上从来没有人解释过发生了什么。 例如,我无法在Tex2D上find任何真实的文档。 我感觉Zoolander的家伙在电脑里捅了一下。 所以,我的问题(是的,我有一个问题) – 哪里是一个好的URL或什么是一个好书,让我从傻逼到合理的写一个基本的着色器?

如果你想了解XNA着色器,这个资源可能会帮助你:

http://forums.create.msdn.com/forums/t/27849.aspx

但是,可能有一个更简单的方法来做你所描述的。 SpriteBatch.Draw方法接受一个Color参数,它可以用来为Sprite的Texture2D着色。 如果你通过Color.White,将不会有着色。 如果你通过Color.Blue,你的精灵会变成蓝色。

牢记这一点,如果你需要不同颜色的多个精灵,这取决于玩家,你可以为每个玩家分配一个颜色,当玩家的精灵渲染时,用玩家的颜色给它着色。 像这样的东西:

SpriteBatch.Draw( Player.Texture, // a Texture2D object depicting the player Player.Location, // where the Texture should be drawn Player.Color ); // the color the tint the player's sprite 

如果你使用如下所示的纹理:

在这里输入图像说明

所有的白色部分将是蓝色的,而黑色将被单独留下。 灰色的各种色调将被染成深蓝色。