animation: recalculate frame index for each animation channel
This commit is contained in:
parent
31e8291e94
commit
c5ed512b73
1
Makefile
1
Makefile
@ -1,6 +1,7 @@
|
||||
BUILD_TYPE ?= debug
|
||||
|
||||
all: $(BUILD_TYPE)/d3d10.exe
|
||||
$(BUILD_TYPE)/d3d10.exe
|
||||
|
||||
%.fxo: %.fx
|
||||
fxc /Od /Zi /T fx_4_0 /nologo /Fo $@ $<
|
||||
|
||||
35
main.cpp
35
main.cpp
@ -18,7 +18,7 @@
|
||||
//#define ROOT_MESH_NODE node_2
|
||||
|
||||
#include "robot_player.hpp"
|
||||
#define ROOT_MESH_NODE node_2
|
||||
#define ROOT_MESH_NODE node_39
|
||||
|
||||
HINSTANCE g_hInstance = NULL;
|
||||
HWND g_hWnd = NULL;
|
||||
@ -296,8 +296,8 @@ HRESULT InitDirect3DDevice()
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
D3D10_RASTERIZER_DESC RSDesc;
|
||||
RSDesc.FillMode = D3D10_FILL_SOLID;
|
||||
//RSDesc.CullMode = D3D10_CULL_BACK;
|
||||
RSDesc.CullMode = D3D10_CULL_NONE;
|
||||
RSDesc.CullMode = D3D10_CULL_BACK;
|
||||
//RSDesc.CullMode = D3D10_CULL_NONE;
|
||||
RSDesc.FrontCounterClockwise = FALSE;
|
||||
RSDesc.DepthBias = 0;
|
||||
RSDesc.SlopeScaledDepthBias = 0.0f;
|
||||
@ -512,12 +512,10 @@ HRESULT InitDirect3DDevice()
|
||||
|
||||
bd.Usage = D3D10_USAGE_DEFAULT;
|
||||
bd.ByteWidth = mesh->indices_size;
|
||||
//bd.ByteWidth = (sizeof (DWORD)) * indices_length;
|
||||
bd.BindFlags = D3D10_BIND_INDEX_BUFFER;
|
||||
bd.CPUAccessFlags = 0;
|
||||
bd.MiscFlags = 0;
|
||||
initData.pSysMem = mesh->indices;
|
||||
//initData.pSysMem = indices;
|
||||
hr = g_pd3dDevice->CreateBuffer(&bd, &initData, &g_pIndexBuffer);
|
||||
if (FAILED(hr)) {
|
||||
print("CreateBuffer\n");
|
||||
@ -644,9 +642,6 @@ void InitializeNodeInstances()
|
||||
node_inst[i].translation = nodes[i]->translation;
|
||||
node_inst[i].rotation = nodes[i]->rotation;
|
||||
node_inst[i].scale = nodes[i]->scale;
|
||||
//node_inst[i].translation = D3DXVECTOR3(0, 0, 0);
|
||||
//node_inst[i].rotation = D3DXQUATERNION(0, 0, 0, 1);
|
||||
//node_inst[i].scale = D3DXVECTOR3(1, 1, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@ -665,7 +660,7 @@ D3DXMATRIX GlobalTransform(int node_ix)
|
||||
D3DXMATRIX local_transform = MatrixTRS(&instance->translation,
|
||||
&instance->rotation,
|
||||
&instance->scale);
|
||||
if (((int)node->parent_ix) >= 0) {
|
||||
if (((int)node->parent_ix) != 40) {
|
||||
return local_transform * GlobalTransform(node->parent_ix);
|
||||
} else {
|
||||
return local_transform;
|
||||
@ -674,20 +669,20 @@ D3DXMATRIX GlobalTransform(int node_ix)
|
||||
|
||||
void Animate(float t)
|
||||
{
|
||||
const AnimationChannel * channels = animation_0__channels;
|
||||
const int channels_length = animation_0__channels__length;
|
||||
const AnimationChannel * channels = animation_1__channels;
|
||||
const int channels_length = animation_1__channels__length;
|
||||
|
||||
t = loop(t, 4.166666030883789);
|
||||
|
||||
// find frame and lerp (same accessor for all channels)
|
||||
const float * input = channels[0].sampler->input;
|
||||
const int input_length = channels[0].sampler->length;
|
||||
|
||||
int frame_ix = FindFrame(input, input_length, t);
|
||||
float lerp = Lerp(input, t, frame_ix);
|
||||
|
||||
// sample all channels
|
||||
for (int i = 0; i < channels_length; i++) {
|
||||
|
||||
// find frame and lerp (same accessor for all channels)
|
||||
const float * input = channels[i].sampler->input;
|
||||
const int input_length = channels[i].sampler->length;
|
||||
int frame_ix = FindFrame(input, input_length, t);
|
||||
float lerp = Lerp(input, t, frame_ix);
|
||||
|
||||
const AnimationSampler * sampler = channels[i].sampler;
|
||||
NodeInstance * instance = &node_inst[channels[i].target.node_ix];
|
||||
switch (channels[i].target.path) {
|
||||
@ -757,8 +752,8 @@ void Render()
|
||||
|
||||
D3DXMATRIX rx;
|
||||
D3DXMATRIX ry;
|
||||
D3DXMatrixRotationY(&ry, (float)D3DX_PI * -0.0f + t);
|
||||
D3DXMatrixRotationX(&rx, (float)D3DX_PI * -0.5f);
|
||||
D3DXMatrixRotationY(&ry, (float)D3DX_PI * -1.0f + t);
|
||||
D3DXMatrixRotationX(&rx, (float)D3DX_PI * -0.0f);
|
||||
D3DXMatrixMultiply(&g_World1,
|
||||
&rx,
|
||||
&ry);
|
||||
|
||||
26196
robot_player.cpp
26196
robot_player.cpp
File diff suppressed because it is too large
Load Diff
3020
robot_player.hpp
3020
robot_player.hpp
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user