diff options
Diffstat (limited to 'source/blender/io/collada/GeometryExporter.cpp')
-rw-r--r-- | source/blender/io/collada/GeometryExporter.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/source/blender/io/collada/GeometryExporter.cpp b/source/blender/io/collada/GeometryExporter.cpp index f6f9026481c..385cf5fefc3 100644 --- a/source/blender/io/collada/GeometryExporter.cpp +++ b/source/blender/io/collada/GeometryExporter.cpp @@ -27,6 +27,7 @@ #include "collada_internal.h" #include "collada_utils.h" +using blender::float3; using blender::Span; void GeometryExporter::exportGeom() @@ -119,12 +120,13 @@ void GeometryExporter::operator()(Object *ob) if (this->export_settings.get_include_shapekeys()) { Key *key = BKE_key_from_object(ob); if (key) { - blender::MutableSpan<MVert> verts = me->verts_for_write(); + blender::MutableSpan<float3> positions = me->positions_for_write(); KeyBlock *kb = (KeyBlock *)key->block.first; /* skip the basis */ kb = kb->next; for (; kb; kb = kb->next) { - BKE_keyblock_convert_to_mesh(kb, verts.data(), me->totvert); + BKE_keyblock_convert_to_mesh( + kb, reinterpret_cast<float(*)[3]>(positions.data()), me->totvert); export_key_mesh(ob, me, kb); } } @@ -434,13 +436,13 @@ void GeometryExporter::create_mesh_primitive_list(short material_index, void GeometryExporter::createVertsSource(std::string geom_id, Mesh *me) { - const Span<MVert> verts = me->verts(); + const Span<float3> positions = me->positions(); COLLADASW::FloatSourceF source(mSW); source.setId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::POSITION)); source.setArrayId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::POSITION) + ARRAY_ID_SUFFIX); - source.setAccessorCount(verts.size()); + source.setAccessorCount(positions.size()); source.setAccessorStride(3); COLLADASW::SourceBase::ParameterNameList ¶m = source.getParameterNameList(); @@ -451,13 +453,15 @@ void GeometryExporter::createVertsSource(std::string geom_id, Mesh *me) * count = ""> */ source.prepareToAppendValues(); /* appends data to <float_array> */ - for (const int i : verts.index_range()) { + for (const int i : positions.index_range()) { Vector co; if (export_settings.get_apply_global_orientation()) { - bc_add_global_transform(co, verts[i].co, export_settings.get_global_transform()); + float co_c[3]; + copy_v3_v3(co_c, positions[i]); + bc_add_global_transform(co, co_c, export_settings.get_global_transform()); } else { - copy_v3_v3(co, verts[i].co); + copy_v3_v3(co, positions[i]); } source.appendValues(co[0], co[1], co[2]); } @@ -577,11 +581,6 @@ bool operator<(const Normal &a, const Normal &b) void GeometryExporter::createNormalsSource(std::string geom_id, Mesh *me, std::vector<Normal> &nor) { -#if 0 - int totverts = dm->getNumVerts(dm); - MVert *verts = dm->getVertArray(dm); -#endif - COLLADASW::FloatSourceF source(mSW); source.setId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::NORMAL)); source.setArrayId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::NORMAL) + ARRAY_ID_SUFFIX); @@ -615,7 +614,7 @@ void GeometryExporter::create_normals(std::vector<Normal> &normals, std::map<Normal, uint> shared_normal_indices; int last_normal_index = -1; - const Span<MVert> verts = me->verts(); + const Span<float3> positions = me->positions(); const float(*vert_normals)[3] = BKE_mesh_vertex_normals_ensure(me); const Span<MPoly> polys = me->polys(); const Span<MLoop> loops = me->loops(); @@ -636,7 +635,10 @@ void GeometryExporter::create_normals(std::vector<Normal> &normals, /* For flat faces use face normal as vertex normal: */ float vector[3]; - BKE_mesh_calc_poly_normal(mpoly, &loops[mpoly->loopstart], verts.data(), vector); + BKE_mesh_calc_poly_normal(mpoly, + &loops[mpoly->loopstart], + reinterpret_cast<const float(*)[3]>(positions.data()), + vector); Normal n = {vector[0], vector[1], vector[2]}; normals.push_back(n); |