public ClothSim(Game game, TexturedPlane clothPlane, float clothMass, float structStiffness, float structDamping, float shearStiffness, float shearDamping, float bendStiffness, float bendDamping) : base(game) { this.clothPlane = clothPlane; //create sim data CreateSimVertices(clothPlane, clothMass); //connect springs and add constraints ConnectSprings(structStiffness, structDamping, shearStiffness, shearDamping, bendStiffness, bendDamping); }
private void InitClothScene() { //cloth attributes int length = 10; int width = 5; int lengthSegments = 20; int widthSegments = 15; //load in a plane clothPlane = new TexturedPlane(this, length, width, lengthSegments, widthSegments, @"checkerboard"); clothPlane.Initialize(); //create a cloth sim float clothMass = 2.0f; float structStiffness = 2.0f; float structDamping = 0.02f; float shearStiffness = 2.0f; float shearDamping = 0.02f; float bendStiffness = 2.0f; float bendDamping = 0.02f; clothSim = new ClothSim(this, clothPlane, clothMass, structStiffness, structDamping, shearStiffness, shearDamping, bendStiffness, bendDamping); clothSim.ConstraintIterations = 10; //add in a global forceGenerators: gravity Gravity gravity = new Gravity(new Vector3(0, -9.81f, 0)); clothSim.AddGlobalForceGenerator(gravity); //constrain the two top corners of the cloth so that we can control it topLeftCorner = new PointConstraint(clothSim.SimVertices[0].CurrPosition, clothSim.SimVertices[0]); clothSim.Constraints.Add(topLeftCorner); topRightCorner = new PointConstraint(clothSim.SimVertices[lengthSegments].CurrPosition, clothSim.SimVertices[lengthSegments]); clothSim.Constraints.Add(topRightCorner); //create an integrator and assign it to the sim float drag = 0.01f; Integrator integrator = new VerletNoVelocityIntegrator(this, drag); clothSim.Integrator = integrator; }
private void CreateSimVertices(TexturedPlane clothPlane, float clothMass) { int numVertices = clothPlane.NumVertices; float vertexMass = clothMass / numVertices; simVertices = new SimVertex[numVertices]; for (int i = 0; i < numVertices; i++) { simVertices[i] = new SimVertex(vertexMass, SimObjectType.ACTIVE, i, clothPlane); this.AddSimObject(simVertices[i]); } }