Добрый вечер!
У меня возник вопрос связаный с шейдером.
Код:
float4x4 WorldViewProj;
texture3D Volume;
sampler3D SVolume = sampler_state
{
Texture = <Volume>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
struct VS_INPUT
{
float4 Position : POSITION0;
};
struct VS_OUTPUT
{
float4 Position : POSITION0;
float4 pos : TEXCOORD0;
};
VS_OUTPUT PositionVS(VS_INPUT input)
{
VS_OUTPUT output;
output.Position = mul(input.Position, WorldViewProj);
output.pos = input.Position;
return output;
}
float4 PixelShaderFunction(VS_OUTPUT input) : COLOR0
{
float4 texColor = tex3D(SVolume,input.pos);
return texColor;
}
technique BasicView
{
pass Pass1
{
VertexShader = compile vs_1_1 PositionVS();
PixelShader = compile ps_1_1 PixelShaderFunction();
}
}
Мне нужно отрезать половину 3Д текстуры. Я подумал, что лучше всего ето можно осуществить умножением Альфа канала 3Д текстури на "0" в заданом промежутке:
float4x4 WorldViewProj;
texture3D Volume;
sampler3D SVolume = sampler_state
{
Texture = <Volume>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;
};
struct VS_INPUT
{
float4 Position : POSITION0;
};
struct VS_OUTPUT
{
float4 Position : POSITION0;
float4 pos : TEXCOORD0;
};
VS_OUTPUT PositionVS(VS_INPUT input)
{
VS_OUTPUT output;
output.Position = mul(input.Position, WorldViewProj);
output.pos = input.Position;
return output;
}
float4 PixelShaderFunction(VS_OUTPUT input) : COLOR0
{
float4 outColor;
if(input.Position.x > 0.5f)
outColor = float4(1,1,1,0);
else
outColor = float4(1,1,1,1);
float4 texColor = tex3D(SVolume,input.pos);
return texColor * outColor;
}
technique BasicView
{
pass Pass1
{
VertexShader = compile vs_1_1 PositionVS();
PixelShader = compile ps_1_1 PixelShaderFunction();
}
}
Но при построении оно вилетает:
Ошибка 1 Errors compiling C:\Documents and Settings\Володя\Мои документы\Visual Studio 2008\Projects\Vol_Render\Vol_Render\Content\Shaders\VolumeRendering.fx:
C:\Documents and Settings\Володя\Мои документы\Visual Studio 2008\Projects\Vol_Render\Vol_Render\Content\Shaders\VolumeRendering.fx(20): error X4502: invalid reference to input semantic 'POSITION0'
C:\Documents and Settings\Володя\Мои документы\Visual Studio 2008\Projects\Vol_Render\Vol_Render\Content\Shaders\VolumeRendering.fx(52): ID3DXEffectCompiler::CompileEffect: There was an error compiling expression
ID3DXEffectCompiler: Compilation failed C:\Documents and Settings\Володя\Мои документы\Visual Studio 2008\Projects\Vol_Render\Vol_Render\Content\Shaders\VolumeRendering.fx 20 1 Vol_Render
Не понимаю почему???
Помогите исправить ошибку, пожалуйста!