fix [#30457] Smooth normals wrongly exported to wavefront
authorCampbell Barton <ideasman42@gmail.com>
Mon, 5 Mar 2012 11:49:24 +0000 (11:49 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 5 Mar 2012 11:49:24 +0000 (11:49 +0000)
mesh.calc_normals() wasnt calculating vertex normals (only face normals),

now only calculate vertex normals.

added a define incase we want to have poly normals back again.

source/blender/editors/mesh/mesh_data.c
source/blender/makesdna/DNA_mesh_types.h

index d1a77cd..428406e 100644 (file)
@@ -782,33 +782,24 @@ void ED_mesh_update(Mesh *mesh, bContext *C, int calc_edges, int calc_tessface)
        /* note on this if/else - looks like these layers are not needed
         * so rather then add poly-index layer and calculate normals for it
         * calculate normals only for the mvert's. - campbell */
-#if 1
-       mesh_calc_normals(mesh->mvert,
-                         mesh->totvert,
-                         mesh->mloop,
-                         mesh->mpoly,
-                         mesh->totloop,
-                         mesh->totpoly, NULL);
-       (void)polyindex;
-       (void)face_nors;
-#else
+#ifdef USE_BMESH_MPOLY_NORMALS
        polyindex = CustomData_get_layer(&mesh->fdata, CD_POLYINDEX);
        /* add a normals layer for tesselated faces, a tessface normal will
         * contain the normal of the poly the face was tesselated from. */
        face_nors = CustomData_add_layer(&mesh->fdata, CD_NORMAL, CD_CALLOC, NULL, mesh->totface);
 
-       mesh_calc_normals_mapping(
-               mesh->mvert,
-               mesh->totvert,
-               mesh->mloop,
-               mesh->mpoly,
-               mesh->totloop,
-               mesh->totpoly,
-               NULL /* polyNors_r */,
-               mesh->mface,
-               mesh->totface,
-               polyindex,
-               face_nors);
+       mesh_calc_normals_mapping_ex(mesh->mvert, mesh->totvert,
+                                    mesh->mloop, mesh->mpoly,
+                                    mesh->totloop, mesh->totpoly,
+                                    NULL /* polyNors_r */,
+                                    mesh->mface, mesh->totface,
+                                    polyindex, face_nors, FALSE);
+#else
+       mesh_calc_normals(mesh->mvert, mesh->totvert,
+                         mesh->mloop, mesh->mpoly, mesh->totloop, mesh->totpoly,
+                         NULL);
+       (void)polyindex;
+       (void)face_nors;
 #endif
 
        DAG_id_tag_update(&mesh->id, 0);
@@ -1121,5 +1112,13 @@ void ED_mesh_polys_add(Mesh *mesh, ReportList *reports, int count)
 
 void ED_mesh_calc_normals(Mesh *mesh)
 {
-       mesh_calc_normals_mapping(mesh->mvert, mesh->totvert, mesh->mloop, mesh->mpoly, mesh->totloop, mesh->totpoly, NULL, NULL, 0, NULL, NULL);
+#ifdef USE_BMESH_MPOLY_NORMALS
+       mesh_calc_normals_mapping_ex(mesh->mvert, mesh->totvert,
+                                    mesh->mloop, mesh->mpoly, mesh->totloop, mesh->totpoly,
+                                    NULL, NULL, 0, NULL, NULL, FALSE);
+#else
+       mesh_calc_normals(mesh->mvert, mesh->totvert,
+                         mesh->mloop, mesh->mpoly, mesh->totloop, mesh->totpoly,
+                         NULL);
+#endif
 }
index 9c20c33..13186a9 100644 (file)
@@ -227,6 +227,8 @@ typedef struct TFace {
 #define USE_BMESH_SAVE_AS_COMPAT
 #define USE_BMESH_SAVE_WITHOUT_MFACE
 
+/* enable this to calculate mpoly normal layer and face origindex mapping */
+// #define USE_BMESH_MPOLY_NORMALS
 
 /* enable this so meshes get tessfaces calculated by default */
 // #define USE_TESSFACE_DEFAULT