public static void DrawSpring(SpringHandler.spring ss, ref SpringHandler.particle[] ps, Color col)
 {
     Debug.DrawLine(ps[ss.connectionA].position, ps[ss.connectionB].position, col);
 }
Beispiel #2
0
    void Update()
    {
        if (clothHandler != null)
        {
            clothComputeShader.SetVector("fixedPos", clothHandler.transform.position);
        }
        clothComputeShader.SetFloat("globalStiffness", globalStiffness);
        clothComputeShader.SetFloat("globalDamping", damping);
        clothComputeShader.SetFloat("mass", mass);
        clothComputeShader.SetFloat("gravityMul", gravityMul);
        clothComputeShader.SetVector("spherePos", sphereCollider.transform.position);
        clothComputeShader.SetFloat("sphereRadius", sphereCollider.transform.lossyScale.y / 2);

        for (int i = 0; i < solverSteps; i++)
        {
            clothComputeShader.SetFloat("deltaTime", Time.deltaTime / solverSteps);
            clothComputeShader.Dispatch(mainClothKernelHandler, count / 8, 1, 1);
        }

        SpringHandler.particle[] ps = new SpringHandler.particle[count];
        SpringHandler.spring[]   ss = new SpringHandler.spring[springCount];

        particleBuffer.GetData(ps);
        springBuffer.GetData(ss);

        if (drawCloth)
        {
            DrawAllConnections(ps, ss);
        }
        if (drawVelocities)
        {
            SpringHandler.DrawVelocity(ps);
        }

        if (printDebug)
        {
            Print("Velocities", ps);
            printDebug = false;
        }

        for (int i = 0; i < ss.Length; i++)
        {
            SpringHandler.spring s = ss[i];
            switch ((SpringHandler.SpringType)s.springType)
            {
            case (SpringHandler.SpringType.StructuralSpring):
                s = SpringHandler.ApplyChanges(s, structuralSpringVars);
                break;

            case (SpringHandler.SpringType.ShearSpring):
                s = SpringHandler.ApplyChanges(s, shearSpringVars);
                break;

            case (SpringHandler.SpringType.StructuralBendingSpring):
                s = SpringHandler.ApplyChanges(s, structuralBendingSpringVars);
                break;

            case (SpringHandler.SpringType.ShearBendingSpring):
                s = SpringHandler.ApplyChanges(s, shearBendingSpringVars);
                break;
            }
            ss[i] = s;
        }

        particleBuffer.SetData(ps);
        springBuffer.SetData(ss);
    }