[Bf-blender-cvs] [977fc6e1158] geometry-nodes-mesh-primitives: Add UVs to plane primitive

Hans Goudey noreply at git.blender.org
Mon Mar 15 22:35:02 CET 2021


Commit: 977fc6e1158c274bde161600d48e7c6fbfb02347
Author: Hans Goudey
Date:   Mon Mar 15 17:34:20 2021 -0400
Branches: geometry-nodes-mesh-primitives
https://developer.blender.org/rB977fc6e1158c274bde161600d48e7c6fbfb02347

Add UVs to plane primitive

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

M	source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_plane.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_plane.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_plane.cc
index df7ee046e58..c08bb659d05 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_plane.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_plane.cc
@@ -43,6 +43,23 @@ static bNodeSocketTemplate geo_node_mesh_primitive_plane_out[] = {
 
 namespace blender::nodes {
 
+static void calculate_uvs(Mesh *mesh, Span<MVert> verts, Span<MLoop> loops, const float size)
+{
+  MeshComponent mesh_component;
+  mesh_component.replace(mesh, GeometryOwnershipType::Editable);
+  OutputAttributePtr uv_attribute = mesh_component.attribute_try_get_for_output(
+      "uv", ATTR_DOMAIN_CORNER, CD_PROP_FLOAT2, nullptr);
+  MutableSpan<float2> uvs = uv_attribute->get_span_for_write_only<float2>();
+
+  for (const int i : loops.index_range()) {
+    const float3 &co = verts[loops[i].v].co;
+    uvs[i].x = (co.x + size) / (size * 2.0f);
+    uvs[i].y = (co.y + size) / (size * 2.0f);
+  }
+
+  uv_attribute.apply_span_and_save();
+}
+
 static Mesh *create_plane_mesh(const int verts_x, const int verts_y, const float size)
 {
   const int edges_x = verts_x - 1;
@@ -57,10 +74,9 @@ static Mesh *create_plane_mesh(const int verts_x, const int verts_y, const float
   MutableSpan<MEdge> edges = MutableSpan<MEdge>(mesh->medge, mesh->totedge);
   MutableSpan<MPoly> polys = MutableSpan<MPoly>(mesh->mpoly, mesh->totpoly);
 
-  const float dx = size * 2.0f / (edges_x);
-  const float dy = size * 2.0f / (edges_y);
-
   {
+    const float dx = size * 2.0f / edges_x;
+    const float dy = size * 2.0f / edges_y;
     float x = -size;
     for (const int x_index : IndexRange(verts_x)) {
       float y = -size;
@@ -125,6 +141,8 @@ static Mesh *create_plane_mesh(const int verts_x, const int verts_y, const float
     }
   }
 
+  calculate_uvs(mesh, verts, loops, size);
+
   return mesh;
 }



More information about the Bf-blender-cvs mailing list