protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < stiffnesses.count; i++)
            {
                particleIndices[i * 2]     = constraints.GetActor().solverIndices[source.particleIndices[i * 2]];
                particleIndices[i * 2 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 2 + 1]];
            }

            // pass constraint data arrays to the solver:
            Oni.SetTetherConstraints(batch, particleIndices.GetIntPtr(), maxLengthsScales.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < restBends.count; i++)
            {
                particleIndices[i * 3]     = constraints.GetActor().solverIndices[source.particleIndices[i * 3]];
                particleIndices[i * 3 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 3 + 1]];
                particleIndices[i * 3 + 2] = constraints.GetActor().solverIndices[source.particleIndices[i * 3 + 2]];
            }

            // pass constraint data arrays to the solver:
            Oni.SetBendingConstraints(batch, particleIndices.GetIntPtr(), restBends.GetIntPtr(), bendingStiffnesses.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < restLengths.count; i++)
            {
                particleIndices[i * 2]     = constraints.GetActor().solverIndices[source.particleIndices[i * 2]];
                particleIndices[i * 2 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 2 + 1]];
                orientationIndices[i]      = constraints.GetActor().solverIndices[((ObiStretchShearConstraintsBatch)source).orientationIndices[i]];
            }

            // pass constraint data arrays to the solver:
            Oni.SetStretchShearConstraints(batch, particleIndices.GetIntPtr(), orientationIndices.GetIntPtr(), restLengths.GetIntPtr(), restOrientations.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
예제 #4
0
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < restLengths.count; i++)
            {
                particleIndices[i * 2]     = constraints.GetActor().solverIndices[source.particleIndices[i * 2]];
                particleIndices[i * 2 + 1] = constraints.GetActor().solverIndices[source.particleIndices[i * 2 + 1]];
                stiffnesses[i]             = new Vector2(0, restLengths[i]);
            }

            // pass constraint data arrays to the solver:
            Oni.SetDistanceConstraints(batch, particleIndices.GetIntPtr(), restLengths.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
        public void AddToSolver(IObiConstraints constraints)
        {
            // create a constraint batch:
            batch = Oni.CreateBatch((int)constraintType);
            Oni.AddBatch(constraints.GetActor().solver.OniSolver, batch);

            OnAddToSolver(constraints);
        }
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < particleIndices.count; i++)
            {
                particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]];
            }

            for (int i = 0; i < orientations.count; i++)
            {
                orientations[i] = constraints.GetActor().actorLocalToSolverMatrix.rotation;
            }

            // pass constraint data arrays to the solver:
            Oni.SetShapeMatchingConstraints(batch, particleIndices.GetIntPtr(), firstIndex.GetIntPtr(), numIndices.GetIntPtr(), explicitGroup.GetIntPtr(),
                                            materialParameters.GetIntPtr(), restComs.GetIntPtr(), coms.GetIntPtr(), orientations.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);

            Oni.CalculateRestShapeMatching(constraints.GetActor().solver.OniSolver, batch);
        }
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < particleIndices.count; i++)
            {
                particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]];
            }

            // pass constraint data arrays to the solver:
            Oni.SetChainConstraints(batch, particleIndices.GetIntPtr(), lengths.GetIntPtr(), firstParticle.GetIntPtr(), numParticles.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
        public void RemoveFromSolver(IObiConstraints constraints)
        {
            OnRemoveFromSolver(constraints);

            // remove the constraint batch from the solver
            // (no need to destroy it as its destruction is managed by the solver)
            Oni.RemoveBatch(constraints.GetActor().solver.OniSolver, batch);

            // important: set the batch pointer to null, as it could be destroyed by the solver.
            batch = IntPtr.Zero;
        }
예제 #9
0
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < skinCompliance.count; i++)
            {
                particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]];
            }

            // pass constraint data arrays to the solver:
            Oni.SetSkinConstraints(batch, particleIndices.GetIntPtr(), skinPoints.GetIntPtr(), skinNormals.GetIntPtr(), skinRadiiBackstop.GetIntPtr(), skinCompliance.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < particleIndices.count; i++)
            {
                particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]];
            }

            // pass constraint data arrays to the solver:
            Oni.SetAerodynamicConstraints(batch, particleIndices.GetIntPtr(), aerodynamicCoeffs.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
예제 #11
0
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            for (int i = 0; i < particleIndices.count; i++)
            {
                particleIndices[i] = constraints.GetActor().solverIndices[source.particleIndices[i]];
            }

            // pass constraint data arrays to the solver:
            Oni.SetVolumeConstraints(batch, particleIndices.GetIntPtr(), firstTriangle.GetIntPtr(),
                                     restVolumes.GetIntPtr(), pressureStiffness.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }
        protected override void OnAddToSolver(IObiConstraints constraints)
        {
            if (source != null)
            {
                for (int i = 0; i < particleIndices.count; i++)
                {
                    particleIndices[i]     = constraints.GetActor().solverIndices[source.particleIndices[i]];
                    stiffnesses[i * 2]     = 0;
                    stiffnesses[i * 2 + 1] = 0;
                }
            }

            // pass constraint data arrays to the solver:
            Oni.SetPinConstraints(batch, particleIndices.GetIntPtr(), offsets.GetIntPtr(), restDarbouxVectors.GetIntPtr(), pinBodies.GetIntPtr(), stiffnesses.GetIntPtr(), m_ConstraintCount);
            Oni.SetActiveConstraints(batch, m_ActiveConstraintCount);
        }