Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/io/collada/GeometryExporter.cpp')
-rw-r--r--source/blender/io/collada/GeometryExporter.cpp30
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 &param = 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);