Proper Animation

This commit is contained in:
lanariel 2014-02-07 08:34:01 +01:00
parent bfa54b9ccd
commit a7480ebf70
9 changed files with 19 additions and 28 deletions

View File

@ -146,7 +146,7 @@ void Oyster::Graphics::Loading::UnloadDAN(void* data)
} }
delete[] info->Animations; delete[] info->Animations;
} }
for(int i =0;i<info->Material.size();++i) for(UINT i =0;i<info->Material.size();++i)
{ {
Core::loader.ReleaseResource(info->Material[i]); Core::loader.ReleaseResource(info->Material[i]);
} }
@ -351,7 +351,7 @@ void* Oyster::Graphics::Loading::LoadDAN(const wchar_t filename[])
Oyster::Graphics::Model::Animation* anims = new Oyster::Graphics::Model::Animation[animationHeader.numAnims]; Oyster::Graphics::Model::Animation* anims = new Oyster::Graphics::Model::Animation[animationHeader.numAnims];
for(int a = 0; a < animationHeader.numAnims; ++a) for(UINT a = 0; a < animationHeader.numAnims; ++a)
{ {
//read name of animation //read name of animation
int nameLength; int nameLength;

View File

@ -70,7 +70,7 @@ void Oyster::Graphics::Loading::UnloadOBJ(void* data)
{ {
SAFE_DELETE(info->Indecies); SAFE_DELETE(info->Indecies);
} }
for(int i =0;i<info->Material.size();++i) for(UINT i =0;i<info->Material.size();++i)
{ {
Core::loader.ReleaseResource(info->Material[i]); Core::loader.ReleaseResource(info->Material[i]);
} }

View File

@ -82,7 +82,7 @@ namespace Oyster
Definitions::AnimationData am; //final Definitions::AnimationData am; //final
if(info->Animated && models[i].AnimationPlaying != -1) if(info->Animated && models[i].AnimationPlaying != -1)
{ {
cube->WorldMatrix == Math::Matrix::identity; cube->WorldMatrix = Math::Matrix::identity;
////store inverse absolut transform ////store inverse absolut transform
Math::Matrix SkinTransform[100]; Math::Matrix SkinTransform[100];
Math::Matrix BoneAnimated[100]; Math::Matrix BoneAnimated[100];
@ -114,7 +114,7 @@ namespace Oyster
int b = 0; int b = 0;
Model::Animation A = info->Animations[models[i].AnimationPlaying]; Model::Animation A = info->Animations[models[i].AnimationPlaying];
while(models[i].AnimationTime>A.duration) while(models[i].AnimationTime>A.duration)
models[i].AnimationTime -= A.duration; models[i].AnimationTime -= (float)A.duration;
float position = models[i].AnimationTime; float position = models[i].AnimationTime;
for(int b = 0; b < A.Bones;++b) for(int b = 0; b < A.Bones;++b)
@ -133,7 +133,7 @@ namespace Oyster
break; break;
} }
} }
float denominator = (NFrame.time - PFrame.time); float denominator = (float)(NFrame.time - PFrame.time);
if(denominator == 0) if(denominator == 0)
{ {
BoneAnimated[PFrame.bone.Parent] = PFrame.bone.Relative; BoneAnimated[PFrame.bone.Parent] = PFrame.bone.Relative;
@ -150,6 +150,7 @@ namespace Oyster
//SkinTransform[b] = BoneAbsAnimated[b]; //SkinTransform[b] = BoneAbsAnimated[b];
cube->WorldMatrix = Scale; cube->WorldMatrix = Scale;
cube->WorldMatrix.v[3] = BoneAbsAnimated[b].v[3]; cube->WorldMatrix.v[3] = BoneAbsAnimated[b].v[3];
cube->WorldMatrix = models[i].WorldMatrix * cube->WorldMatrix;
Basic::RenderScene(cube,1,View,Projection); Basic::RenderScene(cube,1,View,Projection);
} }

View File

@ -210,7 +210,7 @@ namespace Oyster
D3D11_SUBRESOURCE_DATA rnd; D3D11_SUBRESOURCE_DATA rnd;
rnd.pSysMem = random; rnd.pSysMem = random;
rnd.SysMemPitch = sqrt(SampleSpread) * sizeof(Oyster::Math::Vector3); rnd.SysMemPitch = (UINT)(sqrt(SampleSpread) * sizeof(Oyster::Math::Vector3));
ID3D11Texture1D *pTexture1; ID3D11Texture1D *pTexture1;
@ -226,8 +226,8 @@ namespace Oyster
T2desc.BindFlags = D3D11_BIND_SHADER_RESOURCE; T2desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
T2desc.CPUAccessFlags = 0; T2desc.CPUAccessFlags = 0;
T2desc.MiscFlags = 0; T2desc.MiscFlags = 0;
T2desc.Height = sqrt(SampleSpread); T2desc.Height = (UINT)sqrt(SampleSpread);
T2desc.Width = SampleSpread/sqrt(SampleSpread); T2desc.Width = (UINT)(SampleSpread/sqrt(SampleSpread));
T2desc.SampleDesc.Quality = 0; T2desc.SampleDesc.Quality = 0;
T2desc.SampleDesc.Count = 1; T2desc.SampleDesc.Count = 1;

View File

@ -5,7 +5,7 @@ struct VertexIn
float3 normal : NORMAL; float3 normal : NORMAL;
float3 tangent : TANGENT; float3 tangent : TANGENT;
float3 biTangent : BITANGENT; float3 biTangent : BITANGENT;
int4 boneIndex : BONEINDEX; float4 boneIndex : BONEINDEX;
float4 boneWeight : BONEWEIGHT; float4 boneWeight : BONEWEIGHT;
}; };

View File

@ -4,6 +4,6 @@ PixelOut main(VertexOut input)
{ {
PixelOut output; PixelOut output;
output.DiffuseGlow = Diffuse.Sample(S1, input.UV); output.DiffuseGlow = Diffuse.Sample(S1, input.UV);
output.NormalSpec = float4(normalize(input.normal), 1.0f); output.NormalSpec = float4(normalize(input.normal), Normal.Sample(S1,input.UV).w);
return output; return output;
} }

View File

@ -10,8 +10,9 @@ RWTexture2D<float4> Output;
void main( uint3 DTid : SV_DispatchThreadID ) void main( uint3 DTid : SV_DispatchThreadID )
{ {
float4 Light = Diffuse[DTid.xy] + Specular[DTid.xy]; float4 Light = Diffuse[DTid.xy] + Specular[DTid.xy];
float4 Amb = float4(Ambient[DTid.xy/2].xyz * Ambient[DTid.xy/2].w,1); float4 Amb = float4(Ambient[DTid.xy/2].xyz,1);// * Ambient[DTid.xy/2].w,1);
//Output[DTid.xy] = float4(Ambient[DTid.xy/2].xyz /* * Ambient[DTid.xy/2].w */, 1); //Output[DTid.xy] = float4(Ambient[DTid.xy/2].xyz /* * Ambient[DTid.xy/2].w */, 1);
//Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy]; //Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy];
Output[DTid.xy] = Light + Amb * AmbFactor; Output[DTid.xy] = Light + Amb * AmbFactor;
//Output[DTid.xy] = Ambient[DTid.xy/2].w;
} }

View File

@ -12,23 +12,12 @@ VertexOut main( VertexIn input )
Matrix boneTrans = AnimatedData[input.boneIndex.x]*input.boneWeight.x + Matrix boneTrans = AnimatedData[input.boneIndex.x]*input.boneWeight.x +
AnimatedData[input.boneIndex.y]*input.boneWeight.y + AnimatedData[input.boneIndex.y]*input.boneWeight.y +
AnimatedData[input.boneIndex.z]*input.boneWeight.z + AnimatedData[input.boneIndex.z]*input.boneWeight.z +
AnimatedData[input.boneIndex.w]*input.boneWeight.w; AnimatedData[input.boneIndex.w]*input.boneWeight.w;
input.pos = mul(boneTrans,float4(input.pos,1)) * Animated + input.pos * int(1-Animated); input.pos = mul(boneTrans,float4(input.pos,1)).xyz * Animated + input.pos * int(1-Animated);
input.normal = mul(boneTrans,input.normal) * Animated + input.normal * int(1-Animated); input.normal = mul(boneTrans,float4(input.normal,1)).xyz * Animated + input.normal * int(1-Animated);
/*input.pos =
(mul(BoneAnimation[input.boneIndex.x], input.pos) * input.boneWeight.x * Animated) +
(mul(BoneAnimation[input.boneIndex.y], input.pos) * input.boneWeight.y * Animated) +
(mul(BoneAnimation[input.boneIndex.z], input.pos) * input.boneWeight.z * Animated) +
(mul(BoneAnimation[input.boneIndex.w], input.pos) * input.boneWeight.w * Animated) +
input.pos * int(1-Animated);*/
/*input.pos = mul(BoneAnimation[input.boneIndex.x], input.pos) * Animated + input.pos * int(1-Animated);*/
//float4x4 m = matrix(float4(1,0,0,0),float4(0,1,0,0), float4(0,0,1,0), float4(0,0,0,1));
//input.pos = mul(BoneAnimation[0], float4(input.pos,1));
//input.pos = mul(m, float4(input.pos,1));
output.pos = mul(WVP, float4(input.pos,1)); output.pos = mul(WVP, float4(input.pos,1));
output.normal = mul(WV, float4(input.normal,0)).xyz; output.normal = mul(WV, float4(input.normal,0)).xyz;
output.UV = input.UV; output.UV = input.UV;

View File

@ -162,7 +162,7 @@ HRESULT InitDirect3D()
} }
m = Oyster::Graphics::API::CreateModel(L"untitled.dan"); m = Oyster::Graphics::API::CreateModel(L"untitled.dan");
m2 = Oyster::Graphics::API::CreateModel(L"still.dan"); m2 = Oyster::Graphics::API::CreateModel(L"T_reskinned.dan");
m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(0,0,0),Oyster::Math::Float3::null); m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3::null,Oyster::Math::Float3(0,0,0),Oyster::Math::Float3::null);
m2->AnimationPlaying = 0; m2->AnimationPlaying = 0;
m2->AnimationTime = 0.0f; m2->AnimationTime = 0.0f;
@ -195,7 +195,7 @@ HRESULT Update(float deltaTime)
angle += Oyster::Math::pi/16 * deltaTime; angle += Oyster::Math::pi/16 * deltaTime;
//m->WorldMatrix = Oyster::Math3D::RotationMatrix_AxisY(angle) * Oyster::Math3D::RotationMatrix_AxisX(-Oyster::Math::pi/2); //m->WorldMatrix = Oyster::Math3D::RotationMatrix_AxisY(angle) * Oyster::Math3D::RotationMatrix_AxisX(-Oyster::Math::pi/2);
//m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(0,1,0)*-Oyster::Math::pi/2,Oyster::Math::Float3(0,-4,0),Oyster::Math::Float3::null); m2->WorldMatrix = Oyster::Math3D::OrientationMatrix(Oyster::Math::Float3(0,1,0)*-Oyster::Math::pi/2,Oyster::Math::Float3(0,0,0),Oyster::Math::Float3::null);
Oyster::Math::Matrix ma = Oyster::Math::Matrix::identity; Oyster::Math::Matrix ma = Oyster::Math::Matrix::identity;
//ma *= 50; //ma *= 50;
//ma.m44 = 1; //ma.m44 = 1;