From 49ab151b5344c49ec019aac2f4f6918c7f1659f9 Mon Sep 17 00:00:00 2001 From: bjorn Date: Mon, 13 Nov 2017 17:47:56 -0800 Subject: [PATCH] WIP; --- deps/assimp | 2 +- src/graphics/model.c | 16 ++++++++++++---- src/graphics/model.h | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/deps/assimp b/deps/assimp index d402825d..98a1b767 160000 --- a/deps/assimp +++ b/deps/assimp @@ -1 +1 @@ -Subproject commit d402825d03517b94cf4eac8c6caa9514f9e7562f +Subproject commit 98a1b7671d560964c8a27cc7030ced22a1e1e263 diff --git a/src/graphics/model.c b/src/graphics/model.c index 9f50c470..df0e156b 100644 --- a/src/graphics/model.c +++ b/src/graphics/model.c @@ -10,17 +10,20 @@ static void poseNode(Model* model, int nodeIndex, mat4 transform) { float globalTransform[16]; mat4_set(globalTransform, transform); + float localTransform[16]; + mat4_identity(localTransform); + lovrAnimatorEvaluate(model->animator, node->name, localTransform); + + mat4_set(model->nodeTransforms[nodeIndex], localTransform); + int* boneIndex = map_get(&model->modelData->boneMap, node->name); if (!boneIndex) { mat4_multiply(globalTransform, node->transform); + mat4_multiply(globalTransform, localTransform); } else { Bone* bone = &model->modelData->bones.data[*boneIndex]; mat4 finalTransform = model->pose + (*boneIndex * 16); - float localTransform[16]; - mat4_identity(localTransform); - lovrAnimatorEvaluate(model->animator, node->name, localTransform); - mat4_multiply(globalTransform, localTransform); mat4_identity(finalTransform); @@ -41,6 +44,7 @@ static void renderNode(Model* model, int nodeIndex) { lovrGraphicsPush(); lovrGraphicsMatrixTransform(MATRIX_MODEL, node->transform); + lovrGraphicsMatrixTransform(MATRIX_MODEL, model->nodeTransforms[nodeIndex]); for (int i = 0; i < node->primitives.length; i++) { ModelPrimitive* primitive = &model->modelData->primitives[node->primitives.data[i]]; @@ -113,6 +117,10 @@ Model* lovrModelCreate(ModelData* modelData) { mat4_identity(model->pose + (16 * i)); } + for (int i = 0; i < 640; i++) { + mat4_identity(model->nodeTransforms[i]); + } + vec_deinit(&format); return model; } diff --git a/src/graphics/model.h b/src/graphics/model.h index 7fcbb05b..170e0b19 100644 --- a/src/graphics/model.h +++ b/src/graphics/model.h @@ -18,6 +18,7 @@ typedef struct { Material** materials; Animator* animator; float pose[MAX_BONES * 16]; + float nodeTransforms[640][16]; float aabb[6]; bool aabbDirty; } Model;