]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
decompile models written by pre-r8533 zmodel correctly
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 11 Mar 2009 08:44:48 +0000 (08:44 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 11 Mar 2009 08:44:48 +0000 (08:44 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@8795 d7cf8633-e32d-0410-b094-e92efae38249

model_shared.c

index 553928d2a3f275a48b6c7386ca73c2fd72173905..524b3e73d2fb896ef86baa7ff7168331669b2502 100644 (file)
@@ -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;
                }