[Bf-blender-cvs] [de67514b45d] rigid_deform: ignore weights <= 0
Jacques Lucke
noreply at git.blender.org
Thu Jan 31 19:55:57 CET 2019
Commit: de67514b45d2e8f8a54c36bb8b955ad4cad19b25
Author: Jacques Lucke
Date: Tue Jan 29 11:37:04 2019 +0100
Branches: rigid_deform
https://developer.blender.org/rBde67514b45d2e8f8a54c36bb8b955ad4cad19b25
ignore weights <= 0
===================================================================
M source/blender/modifiers/intern/MOD_rigiddeform_system.cc
===================================================================
diff --git a/source/blender/modifiers/intern/MOD_rigiddeform_system.cc b/source/blender/modifiers/intern/MOD_rigiddeform_system.cc
index 704b2ec1174..3ac90a63991 100644
--- a/source/blender/modifiers/intern/MOD_rigiddeform_system.cc
+++ b/source/blender/modifiers/intern/MOD_rigiddeform_system.cc
@@ -77,7 +77,6 @@ static std::vector<WeightedEdge> calculate_cotan_weights(
const std::vector<std::array<uint, 3>> &triangles)
{
std::vector<WeightedEdge> edges;
- edges.reserve(triangles.size() * 3);
for (auto verts : triangles) {
std::array<double, 3> angles = triangle_angles(
@@ -86,10 +85,13 @@ static std::vector<WeightedEdge> calculate_cotan_weights(
positions[verts[2]]);
#define cotan(x) std::cos((x))/std::sin((x))
- edges.push_back(WeightedEdge(verts[1], verts[2], cotan(angles[0]) / 2.0));
- edges.push_back(WeightedEdge(verts[0], verts[2], cotan(angles[1]) / 2.0));
- edges.push_back(WeightedEdge(verts[0], verts[1], cotan(angles[2]) / 2.0));
+ double w1 = cotan(angles[0]) / 2.0;
+ double w2 = cotan(angles[1]) / 2.0;
+ double w3 = cotan(angles[2]) / 2.0;
#undef cotan
+ if (w1 > 0) edges.push_back(WeightedEdge(verts[1], verts[2], w1));
+ if (w2 > 0) edges.push_back(WeightedEdge(verts[0], verts[2], w2));
+ if (w3 > 0) edges.push_back(WeightedEdge(verts[0], verts[1], w3));
}
return edges;
More information about the Bf-blender-cvs
mailing list