public override void Use(SculptState state, Deformer deformer) { deformer.UpdateMask(state); var mask = deformer.Selection; var edgeRecorder = new HashSet <int>(); Vector3[] deformation = deformer.Deformation; for (int i = 0; i < deformer.SelectionCount; i++) { var vert = SculptMesh.Topology.Vertices[mask[i]]; var force = new Vector3(); foreach (var edge in vert.Edges) { var other = edge.GetOtherVertex(vert); var p0 = SculptMesh.Points[vert.Id]; var p1 = SculptMesh.Points[other.Id]; var delta = p1 - p0; force += delta; } deformation[i] = strength * state.strength * force; } deformer.ApplyDeformation(); }
public override void Use(SculptState state, Deformer deformer) { if (state.drawingDown) { deformer.UpdateMask(state); prevPosition = state.position; } if (deformer.SelectionCount == 0) { return; } var delta = state.worldToLocal * state.position - state.worldToLocal * prevPosition; var deformation = deformer.Deformation; for (int i = 0; i < deformer.SelectionCount; ++i) { deformation[i] = delta; } prevPosition = state.position; deformer.ApplyDeformation(); }
public override void Use(SculptState state, Deformer deformer) { deformer.UpdateMask(state); var mask = deformer.Selection; var deformation = deformer.Deformation; Vector3 avgNormal = Vector3.zero; for (int i = 0; i < deformer.SelectionCount; i++) { avgNormal += SculptMesh.Normals[mask[i]]; } avgNormal.Normalize(); float amp = strength * state.strength; float inv = state.drawingInverted ? -1f : 1f; for (int i = 0; i < deformer.SelectionCount; ++i) { deformation[i] = amp * inv * avgNormal; } deformer.ApplyDeformation(); }