コード例 #1
0
	public void BuildSoftBody(List<VoxMass> points, List<Link> links)
	{
		if ( masses == null )
			masses = new List<MegaSoftMass>();

		masses.Clear();

		float ms = Mass / (float)(points.Count + 1);

		for ( int i = 0; i < points.Count; i++ )
		{
			MegaSoftMass rm = new MegaSoftMass(ms, points[i].p);
			masses.Add(rm);
		}

		if ( springs == null )
			springs = new List<MegaSoftSpring>();

		springs.Clear();

		if ( constraints == null )
			constraints = new List<MegaSoftPointConstraint>();

		if ( lenconstraints == null )
			lenconstraints = new List<MegaSoftLengthConstraint>();

		constraints.Clear();
		lenconstraints.Clear();

		float damp1 = (DampingRatio * 0.45f) * (2.0f * Mathf.Sqrt(ms * spring));
		Debug.Log("ratio " + DampingRatio + " damp " + damp1);

		for ( int i = 0; i < links.Count - 1; i++ )
		{
			MegaSoftSpring spr = new MegaSoftSpring(links[i].m1, links[i].m2, spring, damp, this, 1.0f);	//stretch);
			springs.Add(spr);

			//if ( lengthConstraints )
			//{
			//MegaSoftLengthConstraint lcon = new MegaSoftLengthConstraint(links[i].m1, links[i].m2, spr.restlen);
			//lenconstraints.Add(lcon);
			//}
		}

		if ( stiffnessSprings )
		{
			//int gap = 2;
			//for ( int i = 0; i < masses.Count - gap; i++ )
			//{
			//	MegaWireSpring spr = new MegaWireSpring(i, i + 2, wire.stiffrate, wire.stiffdamp, this, wire.stretch);
			//	springs.Add(spr);
			//}
		}

		// Apply fixed end constraints
		//MegaWirePointConstraint pcon = new MegaWirePointConstraint(0, start.transform, outOffset);
		//constraints.Add(pcon);

		//pcon = new MegaWirePointConstraint(masses.Count - 1, end.transform, inOffset);
		//constraints.Add(pcon);

		masspos = new Vector3[masses.Count + 2];

		for ( int i = 0; i < masses.Count; i++ )
			masspos[i + 1] = masses[i].pos;

		masspos[0] = masses[0].pos - (masses[1].pos - masses[0].pos);
		masspos[masspos.Length - 1] = masses[masses.Count - 1].pos + (masses[masses.Count - 1].pos - masses[masses.Count - 2].pos);
	}
コード例 #2
0
    public void BuildSoftBody(List <VoxMass> points, List <Link> links)
    {
        if (masses == null)
        {
            masses = new List <MegaSoftMass>();
        }

        masses.Clear();

        float ms = Mass / (float)(points.Count + 1);

        for (int i = 0; i < points.Count; i++)
        {
            MegaSoftMass rm = new MegaSoftMass(ms, points[i].p);
            masses.Add(rm);
        }

        if (springs == null)
        {
            springs = new List <MegaSoftSpring>();
        }

        springs.Clear();

        if (constraints == null)
        {
            constraints = new List <MegaSoftPointConstraint>();
        }

        if (lenconstraints == null)
        {
            lenconstraints = new List <MegaSoftLengthConstraint>();
        }

        constraints.Clear();
        lenconstraints.Clear();

        float damp1 = (DampingRatio * 0.45f) * (2.0f * Mathf.Sqrt(ms * spring));

        Debug.Log("ratio " + DampingRatio + " damp " + damp1);

        for (int i = 0; i < links.Count - 1; i++)
        {
            MegaSoftSpring spr = new MegaSoftSpring(links[i].m1, links[i].m2, spring, damp, this, 1.0f);                //stretch);
            springs.Add(spr);

            //if ( lengthConstraints )
            //{
            //MegaSoftLengthConstraint lcon = new MegaSoftLengthConstraint(links[i].m1, links[i].m2, spr.restlen);
            //lenconstraints.Add(lcon);
            //}
        }

        if (stiffnessSprings)
        {
            //int gap = 2;
            //for ( int i = 0; i < masses.Count - gap; i++ )
            //{
            //	MegaWireSpring spr = new MegaWireSpring(i, i + 2, wire.stiffrate, wire.stiffdamp, this, wire.stretch);
            //	springs.Add(spr);
            //}
        }

        // Apply fixed end constraints
        //MegaWirePointConstraint pcon = new MegaWirePointConstraint(0, start.transform, outOffset);
        //constraints.Add(pcon);

        //pcon = new MegaWirePointConstraint(masses.Count - 1, end.transform, inOffset);
        //constraints.Add(pcon);

        masspos = new Vector3[masses.Count + 2];

        for (int i = 0; i < masses.Count; i++)
        {
            masspos[i + 1] = masses[i].pos;
        }

        masspos[0] = masses[0].pos - (masses[1].pos - masses[0].pos);
        masspos[masspos.Length - 1] = masses[masses.Count - 1].pos + (masses[masses.Count - 1].pos - masses[masses.Count - 2].pos);
    }