[Bf-blender-cvs] [64bbfaf4214] blender2.8: Subsurf: Set original index for high-poly vertices

Sergey Sharybin noreply at git.blender.org
Thu Jul 19 13:29:35 CEST 2018


Commit: 64bbfaf42144e26718bfb789cba81a409536cf73
Author: Sergey Sharybin
Date:   Wed Jul 18 17:34:44 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB64bbfaf42144e26718bfb789cba81a409536cf73

Subsurf: Set original index for high-poly vertices

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

M	source/blender/blenkernel/BKE_subdiv.h
M	source/blender/blenkernel/intern/subdiv_mesh.c

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

diff --git a/source/blender/blenkernel/BKE_subdiv.h b/source/blender/blenkernel/BKE_subdiv.h
index 92fb1167f55..45316e3cc91 100644
--- a/source/blender/blenkernel/BKE_subdiv.h
+++ b/source/blender/blenkernel/BKE_subdiv.h
@@ -22,6 +22,7 @@
  *
  * ***** END GPL LICENSE BLOCK *****
  */
+
 #ifndef __BKE_SUBDIV_H__
 #define __BKE_SUBDIV_H__
 
diff --git a/source/blender/blenkernel/intern/subdiv_mesh.c b/source/blender/blenkernel/intern/subdiv_mesh.c
index c2a10483e26..9090ebe9f0f 100644
--- a/source/blender/blenkernel/intern/subdiv_mesh.c
+++ b/source/blender/blenkernel/intern/subdiv_mesh.c
@@ -416,7 +416,10 @@ static void loop_interpolation_end(LoopsForInterpolation *loop_interpolation)
 static void subdiv_copy_vertex_data(
         const SubdivMeshContext *ctx,
         MVert *subdiv_vertex,
+        const Mesh *coarse_mesh,
+        const MPoly *coarse_poly,
         const VerticesForInterpolation *vertex_interpolation,
+        const int ptex_of_poly_index,
         const float u, const float v)
 {
 	const int subdiv_vertex_index = subdiv_vertex - ctx->subdiv_mesh->mvert;
@@ -430,7 +433,34 @@ static void subdiv_copy_vertex_data(
 	                  weights, NULL,
 	                  4,
 	                  subdiv_vertex_index);
-	/* TODO(sergey): Set ORIGINDEX. */
+	if (ctx->vert_origindex != NULL) {
+		ctx->vert_origindex[subdiv_vertex_index] = ORIGINDEX_NONE;
+		if (coarse_poly->totloop == 4) {
+			if (u == 0.0f && v == 0.0f) {
+				ctx->vert_origindex[subdiv_vertex_index] =
+				        vertex_interpolation->vertex_indices[0];
+			}
+			else if (u == 1.0f && v == 0.0f) {
+				ctx->vert_origindex[subdiv_vertex_index] =
+				        vertex_interpolation->vertex_indices[1];
+			}
+			else if (u == 1.0f && v == 1.0f) {
+				ctx->vert_origindex[subdiv_vertex_index] =
+				        vertex_interpolation->vertex_indices[2];
+			}
+			else if (u == 0.0f && v == 1.0f) {
+				ctx->vert_origindex[subdiv_vertex_index] =
+				        vertex_interpolation->vertex_indices[3];
+			}
+		} else {
+			if (u == 0.0f && v == 0.0f) {
+				const MLoop *coarse_mloop = coarse_mesh->mloop;
+				ctx->vert_origindex[subdiv_vertex_index] =
+				        coarse_mloop[coarse_poly->loopstart +
+				                             ptex_of_poly_index].v;
+			}
+		}
+	}
 }
 
 static void subdiv_evaluate_vertices(SubdivMeshContext *ctx,
@@ -447,12 +477,12 @@ static void subdiv_evaluate_vertices(SubdivMeshContext *ctx,
 	const int num_poly_ptex_faces = mpoly_ptex_faces_count_get(coarse_poly);
 	/* Hi-poly subdivided mesh. */
 	Mesh *subdiv_mesh = ctx->subdiv_mesh;
-	MVert *subdiv_vertert = subdiv_mesh->mvert;
+	MVert *subdiv_vertex = subdiv_mesh->mvert;
 	const int ptex_face_index = subdiv->face_ptex_offset[poly_index];
 	/* Actual evaluation. */
 	VerticesForInterpolation vertex_interpolation;
 	vertex_interpolation_init(ctx, &vertex_interpolation, coarse_poly);
-	MVert *subdiv_vert = &subdiv_vertert[ptex_face_index * resolution2];
+	MVert *subdiv_vert = &subdiv_vertex[ptex_face_index * resolution2];
 	for (int ptex_of_poly_index = 0;
 	     ptex_of_poly_index < num_poly_ptex_faces;
 	     ptex_of_poly_index++)
@@ -475,7 +505,10 @@ static void subdiv_evaluate_vertices(SubdivMeshContext *ctx,
 				const float u = x * inv_resolution_1;
 				subdiv_copy_vertex_data(ctx,
 				                        subdiv_vert,
+				                        coarse_mesh,
+				                        coarse_poly,
 				                        &vertex_interpolation,
+				                        ptex_of_poly_index,
 				                        u, v);
 			}
 		}



More information about the Bf-blender-cvs mailing list