From 8d8b19633de045afab3a5c5d942434455a15df61 Mon Sep 17 00:00:00 2001 From: divverent Date: Wed, 11 Mar 2009 08:44:48 +0000 Subject: [PATCH] decompile models written by pre-r8533 zmodel correctly git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@8795 d7cf8633-e32d-0410-b094-e92efae38249 --- model_shared.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/model_shared.c b/model_shared.c index 553928d2..524b3e73 100644 --- a/model_shared.c +++ b/model_shared.c @@ -2328,6 +2328,7 @@ static void Mod_Decompile_SMD(dp_model_t *model, const char *filename, int first int transformindex; int poseindex; int cornerindex; + float modelscale; const int *e; const float *pose; size_t l; @@ -2338,6 +2339,16 @@ static void Mod_Decompile_SMD(dp_model_t *model, const char *filename, int first l = dpsnprintf(outbuffer + outbufferpos, outbuffermax - outbufferpos, "version 1\nnodes\n"); if (l > 0) outbufferpos += l; + modelscale = 1; + if(model->num_poses >= 0) + modelscale = sqrt(model->data_poses[0] * model->data_poses[0] + model->data_poses[1] * model->data_poses[1] + model->data_poses[2] * model->data_poses[2]); + if(fabs(modelscale - 1) > 1e-4) + { + if(firstpose == 0) // only print the when writing the reference pose + Con_Printf("The model has an old-style model scale of %f\n", modelscale); + } + else + modelscale = 1; for (transformindex = 0;transformindex < model->num_bones;transformindex++) { if (outbufferpos >= outbuffermax >> 1) @@ -2425,7 +2436,7 @@ static void Mod_Decompile_SMD(dp_model_t *model, const char *filename, int first test[2][3] = pose[11]; } #endif - l = dpsnprintf(outbuffer + outbufferpos, outbuffermax - outbufferpos, "%3i %f %f %f %f %f %f\n", transformindex, pose[3], pose[7], pose[11], DEG2RAD(angles[ROLL]), DEG2RAD(angles[PITCH]), DEG2RAD(angles[YAW])); + l = dpsnprintf(outbuffer + outbufferpos, outbuffermax - outbufferpos, "%3i %f %f %f %f %f %f\n", transformindex, pose[3] * modelscale, pose[7] * modelscale, pose[11] * modelscale, DEG2RAD(angles[ROLL]), DEG2RAD(angles[PITCH]), DEG2RAD(angles[YAW])); if (l > 0) outbufferpos += l; } -- 2.39.2