From fdc6b2921c7314ca4428d8496fcd886748f42f82 Mon Sep 17 00:00:00 2001 From: "K. S. Ernest (iFire) Lee" Date: Wed, 2 Oct 2024 19:06:44 -0700 Subject: [PATCH] Broke. --- modules/geometry3/remesh_operator.cpp | 70 +++++---------------------- 1 file changed, 11 insertions(+), 59 deletions(-) diff --git a/modules/geometry3/remesh_operator.cpp b/modules/geometry3/remesh_operator.cpp index 16d1f05df136..b1faa25cfff2 100644 --- a/modules/geometry3/remesh_operator.cpp +++ b/modules/geometry3/remesh_operator.cpp @@ -183,40 +183,6 @@ DCurve3Ptr ExtractLoopV(g3::DMesh3Ptr mesh, std::vector vertices) { // } // } -//static void EdgeLengthStats(DMesh3Ptr mesh, double &minEdgeLen, -// double &maxEdgeLen, double &avgEdgeLen, -// int samples = 0) { -// minEdgeLen = std::numeric_limits::max(); -// maxEdgeLen = std::numeric_limits::max(); -// avgEdgeLen = 0; -// int avg_count = 0; -// int MaxID = mesh->MaxEdgeID(); -// -// // if we are only taking some samples, use a prime-modulo-loop instead of -// // random -// int nPrime = (samples == 0) ? 1 : nPrime = 31337; -// int max_count = (samples == 0) ? MaxID : samples; -// -// Vector3d a, b; -// int eid = 0; -// int count = 0; -// do { -// if (mesh->IsEdge(eid)) { -// mesh->GetEdgeV(eid, a, b); -// double len = (b - a).norm(); -// if (len < minEdgeLen) -// minEdgeLen = len; -// if (len > maxEdgeLen) -// maxEdgeLen = len; -// avgEdgeLen += len; -// avg_count++; -// } -// eid = (eid + nPrime) % MaxID; -// } while (eid != 0 && count++ < max_count); -// -// avgEdgeLen /= (double)avg_count; -//} - // https://github.com/gradientspace/geometry3Sharp/blob/master/mesh/MeshConstraintUtil.cs // void preserve_group_region_border_loops(DMesh3Ptr mesh) { // int set_id = 1; @@ -240,7 +206,7 @@ Array geometry3_process(Array p_mesh) { ::Vector bones_array = p_mesh[Mesh::ARRAY_BONES]; ::Vector weights_array = p_mesh[Mesh::ARRAY_WEIGHTS]; if (normal_array.size()) { - g3_mesh->EnableVertexNormals(Vector3f(0.0, 0.0, 1.0)); + g3_mesh->EnableVertexNormals(Vector3f(0.0, 1.0, 0.0)); } if (color_array.size()) { g3_mesh->EnableVertexColors(Vector3f(1.0, 1.0, 1.0)); @@ -310,35 +276,21 @@ Array geometry3_process(Array p_mesh) { g3_mesh->AppendTriangle(new_tri); } Remesher r(g3_mesh); - // broke compactinplace - // g3_mesh->CompactInPlace(); - g3::MeshConstraintsPtr cons = std::make_shared(); - // PreserveAllBoundaryEdges(cons, g3_mesh); - //r.SetExternalConstraints(cons); - //r.SetProjectionTarget(MeshProjectionTarget::AutoPtr(g3_mesh, true)); - //PreserveBoundaryLoops(cons, g3_mesh); - // http://www.gradientspace.com/tutorials/2018/7/5/remeshing-and-constraints - int iterations = 1; - //double avg_edge_len = 0.5; - // double min_edge_len = 0.0; - // double max_edge_len = 0.0; - // EdgeLengthStats(g3_mesh, min_edge_len, max_edge_len, avg_edge_len); - // print_line(vformat("target edge len %.2f", avg_edge_len)); - // r.SetTargetEdgeLength(avg_edge_len); - r.Precompute(); - for (int k = 0; k < iterations; ++k) { - r.BasicRemeshPass(); - print_line("remesh pass " + itos(k)); - } - // print_line("remesh done"); - // RemoveFinTriangles(g3_mesh, true); - // std::cout << g3_mesh->MeshInfoString(); + MeshConstraintUtil.FixAllBoundaryEdges(r); // Leaves fins. + r.SetTargetEdgeLength(0.75); + r.SmoothSpeedT = 0.5; + int iterations = 20; + r.Precompute(); + for (int k = 0; k < iterations; ++k) { + r.BasicRemeshPass(); + print_line("remesh pass " + itos(k)); + } + print_line("remesh done"); vertex_array.clear(); index_array.clear(); uv1_array.clear(); normal_array.clear(); color_array.clear(); - for (int32_t vertex_i = 0; vertex_i < g3_mesh->MaxVertexID(); vertex_i++) { NewVertexInfo v = g3_mesh->GetVertexAll(vertex_i);