Hi guys,
I have a problem with a shader which should apply a BumpMap-effect to a sprite.
I tried various tutorials but i could not get it working.
My last try was this one:
From what i read it should exactly do what I want
But: After i use my Shader in spriteBatch.Begin the Draw-Call won’t draw anything. It is like the shader would not receive the base texture at all.
My Shader:
// Effect applies normalmapped lighting to a 2D sprite.
float3 LightDirection;
float3 LightColor = 1.0;
float3 AmbientColor = 0.35;
sampler TextureSampler : register(s0);
sampler NormalSampler : register(s1)
{
Texture = (NormalTexture);
};
float4 main(float4 color : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0
{
//Look up the texture value
float4 tex = tex2D(TextureSampler, texCoord);
//Look up the normalmap value
float4 normal = 2 * tex2D(NormalSampler, texCoord) - 1;
// Compute lighting.
float lightAmount = dot(normal.xyz, LightDirection);
color.rgb *= AmbientColor + (lightAmount * LightColor);
return tex * color;
}
technique Normalmap
{
pass Pass1
{
PixelShader = compile ps_4_0_level_9_1 main();
}
}
My Draw-Call:
protected override void Draw(GameTime gameTime)
{
base.Draw(gameTime);
//This is the light direction to use to light any norma. maps.
Vector2 dir = MoveInCircle(gameTime, 1.0f);
Vector3 lightDirection = new Vector3(dir.X, dir.Y, 0f);
lightDirection.Normalize();
//Clear the device to XNA blue.
GraphicsDevice.Clear(Color.CornflowerBlue);
// Draw without shader
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null);
spriteBatch.Draw(this.baseTexture, Vector2.Zero, Color.White);
spriteBatch.End();
//Set the light directions.
this.newEffect.Parameters["LightDirection"].SetValue(lightDirection);
this.newEffect.Parameters["NormalTexture"].SetValue(this.normal);
this.newEffect.Parameters["LightColor"].SetValue(new Vector3(1f, 1f, 1f));
this.newEffect.Parameters["AmbientColor"].SetValue(new Vector3(.25f, 0.25f, 0.25f));
//Draw with shader
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, this.newEffect);
spriteBatch.Draw(this.baseTexture, new Vector2(600, 0), Color.White);
spriteBatch.End();
}
I am convinced that I’am overlooking something obvious (and probably easy too).
Maybe someone has the clue for me that I need.
Thanks in advance