[Bf-blender-cvs] [a8715cc5b08] temp-T97352-3d-texturing-seam-bleeding-b2: use border length to determine length of new edge.

Jeroen Bakker noreply at git.blender.org
Wed Jun 8 13:05:53 CEST 2022


Commit: a8715cc5b08492540e9cd86c14231c065714f0e5
Author: Jeroen Bakker
Date:   Tue Jun 7 14:59:27 2022 +0200
Branches: temp-T97352-3d-texturing-seam-bleeding-b2
https://developer.blender.org/rBa8715cc5b08492540e9cd86c14231c065714f0e5

use border length to determine length of new edge.

===================================================================

M	source/blender/blenkernel/BKE_uv_islands.hh
M	source/blender/blenkernel/intern/uv_islands.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_uv_islands.hh b/source/blender/blenkernel/BKE_uv_islands.hh
index a463d126a4b..46448295482 100644
--- a/source/blender/blenkernel/BKE_uv_islands.hh
+++ b/source/blender/blenkernel/BKE_uv_islands.hh
@@ -332,9 +332,34 @@ struct UVBorderEdge {
     int actual_index = reverse_order ? 1 - index : index;
     return edge->vertices[actual_index];
   }
+
+  float length() const
+  {
+    return len_v2v2(edge->vertices[0]->uv, edge->vertices[1]->uv);
+  }
 };
 
-using UVBorderCorner = std::pair<UVBorderEdge *, UVBorderEdge *>;
+struct UVBorderCorner {
+  UVBorderEdge *first;
+  UVBorderEdge *second;
+
+  UVBorderCorner(UVBorderEdge *first, UVBorderEdge *second) : first(first), second(second)
+  {
+  }
+
+  float2 uv(float factor)
+  {
+    float2 linear;
+    interp_v2_v2v2(linear, first->get_uv_vertex(0)->uv, second->get_uv_vertex(1)->uv, factor);
+    float2 origin = second->get_uv_vertex(0)->uv;
+    float desired_len = second->length() * factor + first->length() * (1.0 - factor);
+
+    float2 dir = linear - origin;
+    normalize_v2(dir);
+
+    return origin + dir * desired_len;
+  }
+};
 
 struct UVBorder {
   /** Ordered list of UV Verts of the border of this island. */
diff --git a/source/blender/blenkernel/intern/uv_islands.cc b/source/blender/blenkernel/intern/uv_islands.cc
index 8c1c5298d11..5b12a1d8e5b 100644
--- a/source/blender/blenkernel/intern/uv_islands.cc
+++ b/source/blender/blenkernel/intern/uv_islands.cc
@@ -216,8 +216,7 @@ static void extend_at_vert(UVIsland &island, UVBorderCorner &corner, const MeshD
   printf("Found %d new edges to add\n", num_to_add);
 
   if (num_to_add == 0) {
-    float2 center_uv = (corner.first->get_uv_vertex(0)->uv + corner.second->get_uv_vertex(1)->uv) /
-                       2.0f;
+    float2 center_uv = corner.uv(0.5f);
     // no new triangles found. In this case we should extend the existing borders.
     UVVertex center_vertex;
     center_vertex.loop = uv_vertex->loop;



More information about the Bf-blender-cvs mailing list