public void SetVolumeConstraints(ObiNativeIntList triangles, ObiNativeIntList firstIndex, ObiNativeFloatList restVolumes, ObiNativeVector2List pressureStiffness, ObiNativeFloatList lambdas, int count) { Oni.SetVolumeConstraints(oniBatch, triangles.GetIntPtr(), firstIndex.GetIntPtr(), restVolumes.GetIntPtr(), pressureStiffness.GetIntPtr(), lambdas.GetIntPtr(), count); }
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) { 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); }
public void SetShapeMatchingConstraints(ObiNativeIntList particleIndices, ObiNativeIntList firstIndex, ObiNativeIntList numIndices, ObiNativeIntList explicitGroup, ObiNativeFloatList shapeMaterialParameters, ObiNativeVector4List restComs, ObiNativeVector4List coms, ObiNativeQuaternionList orientations, ObiNativeFloatList lambdas, int count) { Oni.SetShapeMatchingConstraints(oniBatch, particleIndices.GetIntPtr(), firstIndex.GetIntPtr(), numIndices.GetIntPtr(), explicitGroup.GetIntPtr(), shapeMaterialParameters.GetIntPtr(), restComs.GetIntPtr(), coms.GetIntPtr(), orientations.GetIntPtr(), count); }
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); }
public void PushDataToSolver() { if (!inSolver) { return; } // set solver constraint data: particleIndices.ResizeUninitialized(stitches.Count * 2); stiffnesses.ResizeUninitialized(stitches.Count); for (int i = 0; i < stitches.Count; i++) { particleIndices[i * 2] = actor1.solverIndices[stitches[i].particleIndex1]; particleIndices[i * 2 + 1] = actor2.solverIndices[stitches[i].particleIndex2]; stiffnesses[i] = 0; } Oni.SetStitchConstraints(batch, particleIndices.GetIntPtr(), stiffnesses.GetIntPtr(), stitches.Count); Oni.SetActiveConstraints(batch, stitches.Count); }
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 SetBendTwistConstraints(ObiNativeIntList orientationIndices, ObiNativeQuaternionList restOrientations, ObiNativeVector3List stiffnesses, ObiNativeFloatList lambdas, int count) { Oni.SetBendTwistConstraints(oniBatch, orientationIndices.GetIntPtr(), restOrientations.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); }
public void SetTetherConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List maxLengthScale, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) { Oni.SetTetherConstraints(oniBatch, particleIndices.GetIntPtr(), maxLengthScale.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); }
public void SetAerodynamicConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList aerodynamicCoeffs, int count) { Oni.SetAerodynamicConstraints(oniBatch, particleIndices.GetIntPtr(), aerodynamicCoeffs.GetIntPtr(), count); }
public void SetChainConstraints(ObiNativeIntList particleIndices, ObiNativeVector2List restLengths, ObiNativeIntList firstIndex, ObiNativeIntList numIndices, int count) { Oni.SetChainConstraints(oniBatch, particleIndices.GetIntPtr(), restLengths.GetIntPtr(), firstIndex.GetIntPtr(), numIndices.GetIntPtr(), count); }
public void InterpolateDiffuseProperties(ObiNativeVector4List properties, ObiNativeVector4List diffusePositions, ObiNativeVector4List diffuseProperties, ObiNativeIntList neighbourCount, int diffuseCount) { Oni.InterpolateDiffuseParticles(oniSolver, properties.GetIntPtr(), diffusePositions.GetIntPtr(), diffuseProperties.GetIntPtr(), neighbourCount.GetIntPtr(), diffuseCount); }
void Solver_OnStepEnd(ObiSolver s) { if (solver == null) { return; } ReallocateParticles(); for (int i = 0; i < alive; ++i) { positions[i] = particles[i].position; } Oni.InterpolateDiffuseParticles(solver.OniSolver, solver.velocities.GetIntPtr(), positions.GetIntPtr(), velocities.GetIntPtr(), neighbourCount.GetIntPtr(), alive); for (int i = 0; i < alive; ++i) { // kill the particle if it has very few neighbors: if (neighbourCount[i] < minNeighbors) { particles[i].remainingLifetime = 0; } particles[i].velocity = velocities[i]; } ps.SetParticles(particles, alive); }
public void SetStitchConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) { Oni.SetStitchConstraints(oniBatch, particleIndices.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); }
public void SetSkinConstraints(ObiNativeIntList particleIndices, ObiNativeVector4List skinPoints, ObiNativeVector4List skinNormals, ObiNativeFloatList skinRadiiBackstop, ObiNativeFloatList skinCompliance, ObiNativeFloatList lambdas, int count) { Oni.SetSkinConstraints(oniBatch, particleIndices.GetIntPtr(), skinPoints.GetIntPtr(), skinNormals.GetIntPtr(), skinRadiiBackstop.GetIntPtr(), skinCompliance.GetIntPtr(), lambdas.GetIntPtr(), count); }
public void SetStretchShearConstraints(ObiNativeIntList particleIndices, ObiNativeIntList orientationIndices, ObiNativeFloatList restLengths, ObiNativeQuaternionList restOrientations, ObiNativeVector3List stiffnesses, ObiNativeFloatList lambdas, int count) { Oni.SetStretchShearConstraints(oniBatch, particleIndices.GetIntPtr(), orientationIndices.GetIntPtr(), restLengths.GetIntPtr(), restOrientations.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); }
public void SetDistanceConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restLengths, ObiNativeVector2List stiffnesses, ObiNativeFloatList lambdas, int count) { Oni.SetDistanceConstraints(oniBatch, particleIndices.GetIntPtr(), restLengths.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); }
public void SetPinConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeQuaternionList restDarbouxVectors, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count) { Oni.SetPinConstraints(oniBatch, particleIndices.GetIntPtr(), offsets.GetIntPtr(), restDarbouxVectors.GetIntPtr(), colliderIndices.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); }
public void SetBendConstraints(ObiNativeIntList particleIndices, ObiNativeFloatList restBends, ObiNativeVector2List bendingStiffnesses, ObiNativeFloatList lambdas, int count) { Oni.SetBendingConstraints(oniBatch, particleIndices.GetIntPtr(), restBends.GetIntPtr(), bendingStiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count); }