Proper Animation
This commit is contained in:
parent
bfa54b9ccd
commit
a7480ebf70
|
@ -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;
|
||||||
|
|
|
@ -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]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -14,21 +14,10 @@ VertexOut main( VertexIn input )
|
||||||
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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue