我在XNA 4.0中的效果文件中加载顶点着色器时遇到问题。
因此,如果没有此行,则可以按照我的意愿运行。
VertexShader = compile vs_2_0 VertexShaderFunction();
那么到目前为止我做了什么......真的没有! :)
加载图片和效果文件。
protected override void LoadContent()
{
spriteBatch = new SpriteBatch(GraphicsDevice);
myTexture = Content.Load<Texture2D>("textures\\fan");
effect = Content.Load<Effect>("effects\\ashader");
}
在屏幕上绘制图像。
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
// Draw the sprite.
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
effect.CurrentTechnique.Passes[0].Apply();
spriteBatch.Draw(myTexture, spritePosition,Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
着色
float4x4 World;
float4x4 View;
float4x4 Projection;
struct VertexShaderInput
{
float4 Position : POSITION0;
};
struct VertexShaderOutput
{
float4 Position : POSITION0;
};
VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output;
float4 worldPosition = mul(input.Position, World);
float4 viewPosition = mul(worldPosition, View);
output.Position = mul(viewPosition, Projection);
return output;
}
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
return float4(1, 0, 0, 1);
}
technique Technique1
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}
这应绘制纹理所在的红色方块。它在没有加载VertexShader的情况下执行此操作。但加载时,根本没有显示纹理。
那我错过了什么?