diff options
author | Gaia Clary <gaia.clary@machinimatrix.org> | 2015-05-06 18:03:24 +0300 |
---|---|---|
committer | Gaia Clary <gaia.clary@machinimatrix.org> | 2015-05-06 18:03:38 +0300 |
commit | 51f33a2e55e6e269545ff319e0d99da67ea08b40 (patch) | |
tree | 235f2fb2ae7ae80782d12c17da94879d8304bbeb /source/blender | |
parent | 14d55ab7a3923e0c411e082adf61d1ed76698358 (diff) |
collada:custom normals generated by normals modifier have not been exported correctly. Also triangulating during export did not work.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/collada/GeometryExporter.cpp | 10 | ||||
-rw-r--r-- | source/blender/collada/collada_utils.cpp | 11 |
2 files changed, 11 insertions, 10 deletions
diff --git a/source/blender/collada/GeometryExporter.cpp b/source/blender/collada/GeometryExporter.cpp index 1353d988137..b29b4c9c484 100644 --- a/source/blender/collada/GeometryExporter.cpp +++ b/source/blender/collada/GeometryExporter.cpp @@ -82,9 +82,6 @@ void GeometryExporter::operator()(Object *ob) this->export_settings->apply_modifiers, this->export_settings->triangulate); - Mesh *mesh = (Mesh *) ob->data; - me->flag = mesh->flag; - std::string geom_id = get_geometry_id(ob, use_instantiation); std::vector<Normal> nor; std::vector<BCPolygonNormalsIndices> norind; @@ -610,16 +607,19 @@ void GeometryExporter::create_normals(std::vector<Normal> &normals, std::vector< MVert *verts = me->mvert; MLoop *mloops = me->mloop; float(*lnors)[3]; + bool use_custom_normals = false; BKE_mesh_calc_normals_split(me); if (CustomData_has_layer(&me->ldata, CD_NORMAL)) { lnors = (float(*)[3])CustomData_get_layer(&me->ldata, CD_NORMAL); + use_custom_normals = true; } for (int poly_index = 0; poly_index < me->totpoly; poly_index++) { MPoly *mpoly = &me->mpoly[poly_index]; + bool use_vertex_normals = use_custom_normals || mpoly->flag & ME_SMOOTH; - if (!(mpoly->flag & ME_SMOOTH)) { + if (!use_vertex_normals) { // For flat faces use face normal as vertex normal: float vector[3]; @@ -634,7 +634,7 @@ void GeometryExporter::create_normals(std::vector<Normal> &normals, std::vector< BCPolygonNormalsIndices poly_indices; for (int loop_index = 0; loop_index < mpoly->totloop; loop_index++) { unsigned int loop_idx = mpoly->loopstart + loop_index; - if (mpoly->flag & ME_SMOOTH) { + if (use_vertex_normals) { float normalized[3]; normalize_v3_v3(normalized, lnors[loop_idx]); diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index d3813e2fb7a..e45c8537948 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -144,6 +144,7 @@ Mesh *bc_get_mesh_copy(Scene *scene, Object *ob, BC_export_mesh_type export_mesh { Mesh *tmpmesh; CustomDataMask mask = CD_MASK_MESH; + Mesh *mesh = (Mesh *)ob->data; DerivedMesh *dm = NULL; if (apply_modifiers) { switch (export_mesh_type) { @@ -165,14 +166,14 @@ Mesh *bc_get_mesh_copy(Scene *scene, Object *ob, BC_export_mesh_type export_mesh tmpmesh = BKE_mesh_add(G.main, "ColladaMesh"); // name is not important here DM_to_mesh(dm, tmpmesh, ob, CD_MASK_MESH, true); + tmpmesh->flag = mesh->flag; if (triangulate) { - bc_triangulate_mesh(tmpmesh); + BKE_mesh_tessface_calc(tmpmesh); + } + else { + BKE_mesh_tessface_ensure(tmpmesh); } - - // XXX Not sure if we need that for ngon_export as well. - BKE_mesh_tessface_ensure(tmpmesh); - return tmpmesh; } |