示例#1
0
    private void Start()
    {
        for (int i = 0; i < 12; ++i)
        {
            PhysicsEngineForFun.Particle p = new PhysicsEngineForFun.Particle
            {
                position     = new PhysicsEngineForFun.Vector3(i / 2, 0, i % 2),
                velocity     = new PhysicsEngineForFun.Vector3(0, 0, 0),
                damping      = 0.9f,
                acceleration = new PhysicsEngineForFun.Vector3(0, -9.8f, 0)
            };

            p.ClearAccumulator();

            world.particles.Add(p);

            particles[i] = p;
        }

        for (int i = 0; i < 10; ++i)
        {
            PhysicsEngineForFun.ParticleCable c = new PhysicsEngineForFun.ParticleCable
            {
                particle0 = particles[i],
                particle1 = particles[i + 2],
                maxLength = 2f,
                restitutionCoefficient = 0.3f
            };

            world.contactGenerators.Add(c);

            cables[i] = c;
        }

        for (int i = 0; i < 12; ++i)
        {
            PhysicsEngineForFun.ParticleCableConstraint c = new PhysicsEngineForFun.ParticleCableConstraint()
            {
                particle               = particles[i],
                anchorPoint            = new PhysicsEngineForFun.Vector3(i / 2 * 2f + 4f, 4, i % 2 * 1.4f - 3.2f),
                maxLength              = i < 6 ? i / 2 * 0.5f + 3f : (5 - i / 2) * 0.5f + 3f,
                restitutionCoefficient = 0.5f
            };

            world.contactGenerators.Add(c);

            constraints[i] = c;
        }

        for (int i = 0; i < 6; ++i)
        {
            PhysicsEngineForFun.ParticleConnectingRod r = new PhysicsEngineForFun.ParticleConnectingRod()
            {
                particle0 = particles[i * 2],
                particle1 = particles[i * 2 + 1],
                Length    = 2f
            };

            world.contactGenerators.Add(r);

            connectingRods[i] = r;
        }

        UpdateAdditionalMass();
    }
    private void Start()
    {
        for (int i = 0; i < 4; ++i)
        {
            PhysicsEngineForFun.Particle p = new PhysicsEngineForFun.Particle
            {
                velocity     = new PhysicsEngineForFun.Vector3(0, 0, 0),
                damping      = 0.9f,
                acceleration = new PhysicsEngineForFun.Vector3(0, -9.8f, 0)
            };
            p.ClearAccumulator();

            world.particles.Add(p);

            particles[i] = p;
        }

        particles[0].position = new PhysicsEngineForFun.Vector3(-3, 2, 1);
        particles[1].position = new PhysicsEngineForFun.Vector3(-3, 2, -1);
        particles[2].position = new PhysicsEngineForFun.Vector3(4, 2, 1);
        particles[3].position = new PhysicsEngineForFun.Vector3(4, 2, -1);

        for (int i = 0; i < 6; ++i)
        {
            connectingRods[i] = new PhysicsEngineForFun.ParticleConnectingRod();
            world.contactGenerators.Add(connectingRods[i]);
        }

        connectingRods[0].particle0 = particles[0];
        connectingRods[0].particle1 = particles[1];
        connectingRods[0].Length    = 2;
        connectingRods[1].particle0 = particles[2];
        connectingRods[1].particle1 = particles[3];
        connectingRods[1].Length    = 2;
        connectingRods[2].particle0 = particles[0];
        connectingRods[2].particle1 = particles[2];
        connectingRods[2].Length    = 7;
        connectingRods[3].particle0 = particles[1];
        connectingRods[3].particle1 = particles[3];
        connectingRods[3].Length    = 7;
        connectingRods[4].particle0 = particles[0];
        connectingRods[4].particle1 = particles[3];
        connectingRods[4].Length    = 7.28f;
        connectingRods[5].particle0 = particles[1];
        connectingRods[5].particle1 = particles[2];
        connectingRods[5].Length    = 7.28f;

        for (int i = 0; i < 8; ++i)
        {
            rodsConstraints[i] = new PhysicsEngineForFun.ParticleConnectingRodConstraint();
            world.contactGenerators.Add(rodsConstraints[i]);
        }

        rodsConstraints[0].anchorPoint = fixedPoints[0];
        rodsConstraints[0].particle    = particles[0];
        rodsConstraints[0].Length      = 3.606f;
        rodsConstraints[1].anchorPoint = fixedPoints[1];
        rodsConstraints[1].particle    = particles[1];
        rodsConstraints[1].Length      = 3.606f;
        rodsConstraints[2].anchorPoint = fixedPoints[0];
        rodsConstraints[2].particle    = particles[2];
        rodsConstraints[2].Length      = 4.472f;
        rodsConstraints[3].anchorPoint = fixedPoints[1];
        rodsConstraints[3].particle    = particles[3];
        rodsConstraints[3].Length      = 4.472f;
        rodsConstraints[4].anchorPoint = fixedPoints[0];
        rodsConstraints[4].particle    = particles[1];
        rodsConstraints[4].Length      = 4.123f;
        rodsConstraints[5].particle    = particles[3];
        rodsConstraints[5].anchorPoint = fixedPoints[0];
        rodsConstraints[5].Length      = 4.899f;
        rodsConstraints[6].particle    = particles[2];
        rodsConstraints[6].anchorPoint = fixedPoints[1];
        rodsConstraints[6].Length      = 4.899f;
        rodsConstraints[7].anchorPoint = fixedPoints[1];
        rodsConstraints[7].particle    = particles[0];
        rodsConstraints[7].Length      = 4.123f;

        UpdateAdditionalMass();
    }