Exemple #1
0
 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);
     }
 }
Exemple #2
0
        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;
        }
Exemple #3
0
        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;
        }
Exemple #4
0
        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);
        }
Exemple #6
0
        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;
        }
Exemple #7
0
        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);
        }