void InitClusterCollide2() { for (int i = 0; i < 3; ++i) { SoftBody psb = SoftBodyHelpers.CreateFromTriMesh(softBodyWorldInfo, TorusMesh.Vertices, TorusMesh.Indices); Material pm = psb.AppendMaterial(); pm.Flags -= FMaterial.DebugDraw; psb.GenerateBendingConstraints(2, pm); psb.Cfg.PIterations = 2; psb.Cfg.DF = 1; psb.Cfg.SshrCl = 1; psb.Cfg.SSSplitCl = 0; psb.Cfg.SkhrCl = 0.1f; psb.Cfg.SKSplitCl = 1; psb.Cfg.Collisions = FCollisions.CLSS | FCollisions.CLRS; psb.RandomizeConstraints(); Matrix m = Matrix.RotationYawPitchRoll((float)Math.PI / 2 * (i & 1), (float)Math.PI / 2 * (1 - (i & 1)), 0) * Matrix.Translation(3 * i, 2, 0); psb.Transform(m); psb.Scale(new Vector3(2, 2, 2)); psb.SetTotalMass(50, true); psb.GenerateClusters(16); SoftWorld.AddSoftBody(psb); } }
void InitClusterDeform() { SoftBody psb = CreateClusterTorus(Vector3.Zero, new Vector3((float)Math.PI / 2, 0, (float)Math.PI / 2)); psb.GenerateClusters(8); psb.Cfg.DF = 1; }
void InitClusterCollide1() { const float s = 8; SoftBody psb = SoftBodyHelpers.CreatePatch(softBodyWorldInfo, new Vector3(-s, 0, -s), new Vector3(+s, 0, -s), new Vector3(-s, 0, +s), new Vector3(+s, 0, +s), 17, 17,//9,9,//31,31, 1 + 2 + 4 + 8, true); Material pm = psb.AppendMaterial(); pm.Lst = 0.4f; pm.Flags -= FMaterial.DebugDraw; psb.Cfg.DF = 1; psb.Cfg.SrhrCl = 1; psb.Cfg.SRSplitCl = 0; psb.Cfg.Collisions = FCollisions.CLSS | FCollisions.CLRS; psb.GenerateBendingConstraints(2, pm); psb.CollisionShape.Margin = 0.05f; psb.SetTotalMass(50); // pass zero in generateClusters to create cluster for each tetrahedron or triangle psb.GenerateClusters(0); //psb.GenerateClusters(64); SoftWorld.AddSoftBody(psb); CreateRigidBodyStack(10); CullingEnabled = false; }
void InitTetraCube() { string path = System.IO.Path.GetDirectoryName(Application.ExecutablePath); SoftBody psb = SoftBodyHelpers.CreateFromTetGenFile(softBodyWorldInfo, path + "\\data\\cube.ele", null, path + "\\data\\cube.node", false, true, true); SoftWorld.AddSoftBody(psb); psb.Scale(new Vector3(4, 4, 4)); psb.Translate(0, 5, 0); psb.SetVolumeMass(300); // fix one vertex //psb.SetMass(0,0); //psb.SetMass(10,0); //psb.SetMass(20,0); psb.Cfg.PIterations = 1; //psb.GenerateClusters(128); psb.GenerateClusters(16); //psb.CollisionShape.Margin = 0.5f; psb.CollisionShape.Margin = 0.01f; psb.Cfg.Collisions = FCollisions.CLSS | FCollisions.CLRS; // | FCollisions.CLSelf; psb.Materials[0].Lst = 0.8f; cutting = false; CullingEnabled = false; }
SoftBody Init_ClusterRobot_CreateBall(Vector3 pos) { SoftBody psb = SoftBodyHelpers.CreateEllipsoid(softBodyWorldInfo, pos, new Vector3(1, 1, 1) * 3, 512); psb.Materials[0].Lst = 0.45f; psb.Cfg.VC = 20; psb.SetTotalMass(50, true); psb.SetPose(true, false); psb.GenerateClusters(1); SoftWorld.AddSoftBody(psb); return(psb); }
void Init_TetraBunny() { SoftBody psb = SoftBodyHelpers.CreateFromTetGenData(softBodyWorldInfo, Bunny.GetElements(), null, Bunny.GetNodes(), false, true, true); SoftWorld.AddSoftBody(psb); psb.Rotate(Quaternion.RotationYawPitchRoll((float)Math.PI / 2, 0, 0)); psb.SetVolumeMass(150); psb.Cfg.PIterations = 2; //psb.Cfg.PIterations = 1; cutting = false; //psb.CollisionShape.Margin = 0.01f; psb.Cfg.Collisions = FCollisions.CLSS | FCollisions.CLRS; //| FCollisions.CLSelf; ///pass zero in generateClusters to create cluster for each tetrahedron or triangle psb.GenerateClusters(0); //psb.Materials[0].Lst = 0.2f; psb.Cfg.DF = 10; }
SoftBody CreateClusterTorus(Vector3 x, Vector3 a, Vector3 s) { SoftBody psb = SoftBodyHelpers.CreateFromTriMesh(softBodyWorldInfo, TorusMesh.Vertices, TorusMesh.Indices); Material pm = psb.AppendMaterial(); pm.Lst = 1; pm.Flags -= FMaterial.DebugDraw; psb.GenerateBendingConstraints(2, pm); psb.Cfg.PIterations = 2; psb.Cfg.Collisions = FCollisions.CLSS | FCollisions.CLRS; psb.RandomizeConstraints(); psb.Scale(s); Matrix m = Matrix.RotationYawPitchRoll(a.X, a.Y, a.Z) * Matrix.Translation(x); psb.Transform(m); psb.SetTotalMass(50, true); psb.GenerateClusters(64); SoftWorld.AddSoftBody(psb); return(psb); }
/// <summary> /// Apply these SoftBody settings to this SoftBody /// </summary> /// <param name="softBody"></param> public void ConfigureSoftBody(SoftBody softBody) { softBody.Scale(scale.ToBullet()); BulletSharp.SoftBody.Material pm = softBody.Materials[0]; sBMaterial.SetSBMaterial(pm); config.CopyToBulletSBConfig(softBody.Cfg); if (allNodeBendingConstraints) { for (int i = 0; i < softBody.Nodes.Count - 1; ++i) { softBody.GenerateBendingConstraints(1 + i); } } else { softBody.GenerateBendingConstraints(bendingConstraintDistance, pm); } if (randomizeConstraints) { softBody.RandomizeConstraints(); } if (generateClusters) { softBody.GenerateClusters(0); } softBody.SetTotalMass(totalMass, fromFaces); softBody.SetPose(bvolume, bframe); }