Написал первый порношейдер методом... В общем, неправильным методом

. Делает он следующее рисует текстуру и все. Потом мне захотелось добавить функциональности в вершинный шейдер, сделал ввод переменной из хорса в шейдер. Далее решил умножить координаты вертексов на синус от введенной переменной.

//Матрицы
//xSetEffectMatrixSemantic tModel,"MatWorldViewProj",WORLDVIEWPROJ
//xSetEffectMatrixSemantic tModel,"MatWorld",WORLD
float4x4 MatWorldViewProj;
float4x4 MatWorld;
// вношу время из хорса
float time;
// Объявление переменных в данном случае вывод пиксельного шейдера
static float3 Color;
static float4 cD;
//Передача тестуры в шейдер
//xSetEffectTexture tModel, "InShaderTextureName",texDiffuse
const texture InShaderTextureName;
sampler TexDiffuse=sampler_state { //тут я говорю что текстура Diffuse типа
Texture = <InShaderTextureName>;
};
//###### Ввод в вершинный шейдер ##################
struct VertexShaderInput {
float4 Position : POSITION0; // мировая позиция вершины
float3 Normal : NORMAL; // нормаль к этой вершине
float2 TexCoords : TEXCOORD0; // координаты точки на текстуре
};
//# Вывод вершинного шейдера = ввод пиксельного ###
struct PixelShaderInput {
float4 Position : POSITION0; //новая мировая позиция вершины
float4 pWorld : TEXCOORD0;
float3 Normal : TEXCOORD1;
float2 TexCoords : TEXCOORD2;
};
//вершинный шейдер
void NameOfVertexShaderFunction( in VertexShaderInput IN, out PixelShaderInput OUT ) {
//OUT.Position = mul((mul(IN.Position,MatWorldViewProj)),cos(time));
[b]OUT.Position = mul(IN.Position,MatWorldViewProj)*cos(time);[/b]
OUT.pWorld = mul(IN.Position,MatWorld);
OUT.Normal = normalize(mul(IN.Normal,MatWorld));
OUT.TexCoords = IN.TexCoords;
}
//пиксельный шейдер
float4 NameOfPixelShader( in PixelShaderInput IN ) : COLOR {
cD = tex2D(TexDiffuse,IN.TexCoords);
Color = cD.rgb;
return float4(Color,cD.a);
}
//################## Technique ##################
// здесь расположен проход этот кусок заставляет исполняться шейдер
//xSetEffectTechnique tModel,"TechniqueName"
technique TechniqueName {
pass p0 { //проход рендера их может быть несколько с разными шейдерами
AlphaBlendEnable= false;
vertexshader = compile vs_2_0 NameOfVertexShaderFunction();
pixelshader = compile ps_2_0 NameOfPixelShader();
}
}
Но вместо плавного морфинга получилось моргание меша, на который применен мой чудо шейдер, это от того что в float4 Position : POSITION0; есть еще и W и умножение на синус и дает такой чудный эффект моргания?