Browse Source

fix normal scaling

David Rose 20 years ago
parent
commit
68326315de
1 changed files with 7 additions and 2 deletions
  1. 7 2
      panda/src/egg2pg/eggLoader.cxx

+ 7 - 2
panda/src/egg2pg/eggLoader.cxx

@@ -2024,7 +2024,9 @@ make_vertex_data(const EggRenderState *render_state,
 
 
     if (vertex->has_normal()) {
     if (vertex->has_normal()) {
       gvw.set_column(InternalName::get_normal());
       gvw.set_column(InternalName::get_normal());
-      gvw.add_data3f(LCAST(float, vertex->get_normal() * transform));
+      Normald orig_normal = vertex->get_normal();
+      Normald transformed_normal = normalize(orig_normal * transform);
+      gvw.add_data3f(LCAST(float, transformed_normal));
 
 
       if (is_dynamic) {
       if (is_dynamic) {
         EggMorphNormalList::const_iterator mni;
         EggMorphNormalList::const_iterator mni;
@@ -2033,7 +2035,10 @@ make_vertex_data(const EggRenderState *render_state,
           CPT(InternalName) delta_name = 
           CPT(InternalName) delta_name = 
             InternalName::get_morph(InternalName::get_normal(), morph.get_name());
             InternalName::get_morph(InternalName::get_normal(), morph.get_name());
           gvw.set_column(delta_name);
           gvw.set_column(delta_name);
-          gvw.add_data3f(LCAST(float, morph.get_offset() * transform));
+	  Normald morphed_normal = orig_normal + morph.get_offset();
+	  Normald transformed_morphed_normal = normalize(morphed_normal * transform);
+	  LVector3d delta = transformed_morphed_normal - transformed_normal;
+	  gvw.add_data3f(LCAST(float, delta));
         }
         }
       }
       }
     }
     }