Beispiel #1
0
        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();
        }
Beispiel #2
0
        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();
        }
Beispiel #3
0
        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();
        }