[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