Просмотр исходного кода

add egg-vertex-membership-quantize

David Rose 14 лет назад
Родитель
Сommit
de346aa4d1
3 измененных файлов с 14 добавлено и 0 удалено
  1. 8 0
      panda/src/egg2pg/config_egg2pg.cxx
  2. 1 0
      panda/src/egg2pg/config_egg2pg.h
  3. 5 0
      panda/src/egg2pg/eggLoader.cxx

+ 8 - 0
panda/src/egg2pg/config_egg2pg.cxx

@@ -169,6 +169,14 @@ ConfigVariableBool egg_preload_simple_textures
           "fact, the egg loader will generate simple texture images if "
           "fact, the egg loader will generate simple texture images if "
           "either this or preload-simple-textures is true."));
           "either this or preload-simple-textures is true."));
 
 
+ConfigVariableDouble egg_vertex_membership_quantize
+("egg-vertex-membership-quantize", 0.01,
+ PRC_DESC("Specifies the nearest amount to round each vertex joint "
+          "membership value when loading an egg file.  This affects animated "
+          "egg files only.  There is a substantial runtime "
+          "performance advantage for reducing trivial differences in joint "
+          "membership.  Set this to 0 to leave joint membership as it is."));
+
 ConfigureFn(config_egg2pg) {
 ConfigureFn(config_egg2pg) {
   init_libegg2pg();
   init_libegg2pg();
 }
 }

+ 1 - 0
panda/src/egg2pg/config_egg2pg.h

@@ -52,6 +52,7 @@ extern EXPCL_PANDAEGG ConfigVariableInt egg_max_vertices;
 extern EXPCL_PANDAEGG ConfigVariableInt egg_max_indices;
 extern EXPCL_PANDAEGG ConfigVariableInt egg_max_indices;
 extern EXPCL_PANDAEGG ConfigVariableBool egg_emulate_bface;
 extern EXPCL_PANDAEGG ConfigVariableBool egg_emulate_bface;
 extern EXPCL_PANDAEGG ConfigVariableBool egg_preload_simple_textures;
 extern EXPCL_PANDAEGG ConfigVariableBool egg_preload_simple_textures;
+extern EXPCL_PANDAEGG ConfigVariableDouble egg_vertex_membership_quantize;
 
 
 extern EXPCL_PANDAEGG void init_libegg2pg();
 extern EXPCL_PANDAEGG void init_libegg2pg();
 
 

+ 5 - 0
panda/src/egg2pg/eggLoader.cxx

@@ -93,6 +93,7 @@
 #include "thread.h"
 #include "thread.h"
 #include "uvScrollNode.h"
 #include "uvScrollNode.h"
 #include "textureStagePool.h"
 #include "textureStagePool.h"
+#include "cmath.h"
 
 
 #include <ctype.h>
 #include <ctype.h>
 #include <algorithm>
 #include <algorithm>
@@ -2487,10 +2488,14 @@ make_vertex_data(const EggRenderState *render_state,
       } else {
       } else {
         // If the vertex does have an explicit membership, ignore its
         // If the vertex does have an explicit membership, ignore its
         // parentage and assign it where it wants to be.
         // parentage and assign it where it wants to be.
+        double quantize = egg_vertex_membership_quantize;
         EggVertex::GroupRef::const_iterator gri;
         EggVertex::GroupRef::const_iterator gri;
         for (gri = vertex->gref_begin(); gri != vertex->gref_end(); ++gri) {
         for (gri = vertex->gref_begin(); gri != vertex->gref_end(); ++gri) {
           EggGroup *egg_joint = (*gri);
           EggGroup *egg_joint = (*gri);
           double membership = egg_joint->get_vertex_membership(vertex);
           double membership = egg_joint->get_vertex_membership(vertex);
+          if (quantize != 0.0) {
+            membership = cfloor(membership / quantize + 0.5) * quantize;
+          }
           
           
           PT(VertexTransform) vt = character_maker->egg_to_transform(egg_joint);
           PT(VertexTransform) vt = character_maker->egg_to_transform(egg_joint);
           nassertr(vt != (VertexTransform *)NULL, vertex_data);
           nassertr(vt != (VertexTransform *)NULL, vertex_data);