Code: Select all
float4x4 uMVP;
float4x3 uBone[59];
sampler2D uTexture : register(s0);
struct VS_INPUT
{
float4 Position : POSITION;
float3 Normal : NORMAL;
float2 TexCoord : TEXCOORD0;
float4 BlendWeight : BLENDWEIGHT;
float4 BlendIndex : BLENDINDICES;
};
struct VS_PS
{
float4 Position : POSITION;
float2 TexCoord : TEXCOORD0;
};
struct PS_OUTPUT
{
float4 Color : COLOR0;
};
VS_PS VertexShaderFunction(VS_INPUT Input)
{
VS_PS Output;
float4 Position = float4(0.0, 0.0, 0.0, 0.0);
for (int i = 0; i < 4; ++i)
//Position += float4(mul(Input.Position, uBone[int(Input.BlendIndex[i])]) * Input.BlendWeight[i]); // commented out for float4x3 below
Position += float4((mul(Input.Position.xyz, uBone[int(Input.BlendIndex[i])]) * Input.BlendWeight[i]),1.0);
Output.Position = mul(float4(Position.xyz ,1.0),uMVP);
Output.TexCoord = Input.TexCoord;
return Output;
}