diff options
author | Aras Pranckevicius <aras@nesnausk.org> | 2022-10-03 11:07:35 +0300 |
---|---|---|
committer | Aras Pranckevicius <aras@nesnausk.org> | 2022-10-03 11:07:50 +0300 |
commit | 7029f11439c21d64e3d43133209d69eff62026b8 (patch) | |
tree | fc03394bf300e634219ece021a67bfd392c74b28 /source/blender | |
parent | cbfd2aaeb7806ee83b4b01215997ee310690dcb1 (diff) |
Fix T101487: New OBJ importer handles UVs incorrectly when some faces of an object don't have UVs
The UV data filling logic was incorrectly just skipping over loop
entries that don't have a UV coordinate, instead of assigning
the default zero UV for them. This was a problem only for meshes
where some faces did have UVs, but some other faces did not (T101487).
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/io/wavefront_obj/importer/obj_import_mesh.cc | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc b/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc index 4a4d1eeadb6..33ece88d3d4 100644 --- a/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc +++ b/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc @@ -275,12 +275,13 @@ void MeshFromGeometry::create_uv_verts(Mesh *mesh) for (const PolyElem &curr_face : mesh_geometry_.face_elements_) { for (int idx = 0; idx < curr_face.corner_count_; ++idx) { const PolyCorner &curr_corner = mesh_geometry_.face_corners_[curr_face.start_index_ + idx]; - if (curr_corner.uv_vert_index >= 0 && - curr_corner.uv_vert_index < global_vertices_.uv_vertices.size()) { - const float2 &mluv_src = global_vertices_.uv_vertices[curr_corner.uv_vert_index]; - copy_v2_v2(mluv_dst[tot_loop_idx].uv, mluv_src); - tot_loop_idx++; + const int uv_index = curr_corner.uv_vert_index; + float2 uv(0, 0); + if (uv_index >= 0 && uv_index < global_vertices_.uv_vertices.size()) { + uv = global_vertices_.uv_vertices[uv_index]; } + copy_v2_v2(mluv_dst[tot_loop_idx].uv, uv); + tot_loop_idx++; } } } |