コード例 #1
0
        private void CreatePointJoints()
        {
            var vertices = provider.GetVertices();
            var sizeY    = settings.StandsSettings.Segments;

            if (pointJoints == null)
            {
                pointJoints = new GPPointJoint[vertices.Count];
            }

            for (var i = 0; i < vertices.Count; i++)
            {
                var vertex   = vertices[i];
                var matrixId = settings.StandsSettings.Provider.GetScalpMeshType() == ScalpMeshType.Skinned
                    ? i / sizeY
                    : 0;

                var t = i % sizeY;

                var elasticity = t == 0
                    ? 1f
                    : Mathf.Clamp01(1 - settings.PhysicsSettings.ElasticityCurve.Evaluate((float)t / sizeY));

                elasticity += JointAreaAdd(vertex);

                pointJoints[i] = new GPPointJoint(i, matrixId, vertex, Mathf.Clamp01(elasticity));
            }
        }
コード例 #2
0
        public void AddPointJoint(GPBody body, Vector3 point, Matrix4x4 matrix, float elasticity)
        {
            var bodyId = Array.IndexOf(bodies, body);

            Assert.IsTrue(bodyId >= 0, "Add body to world first");

            var joint = new GPPointJoint(bodyId, matrices.Length, point, elasticity);

            ArrayUtils.Add(ref pointJoints, joint);
            ArrayUtils.Add(ref matrices, matrix);
        }
コード例 #3
0
        private void InitBuffers()
        {
            TryAddBufferOrArray("matrices", data.MatricesBuffer, data.Matrices, sizeof(float) * 16);

            TryCreateBuffer("bodies", data.Bodies, GPBody.Size());
            TryCreateBuffer("sphereColliders", data.SphereColliders, GPSphereCollider.Size());

            TryCreateBuffer("kinematicBodies", data.KinematicsBodies, GPBody.Size());
            TryCreateBuffer("kinematicSphereColliders", data.KinematicsSphereColliders, GPSphereCollider.Size());
            TryCreateBuffer("kinematicsLineSphereColliders", data.KinematicsLineSphereColliders, GPLineSphereCollider.Size());

            TryCreateBuffer("distanceJoints", data.DistanceJoints.Data, GPDistanceJoint.Size());
            TryCreateBuffer("pointJoints", data.PointJoints, GPPointJoint.Size());

            bodiesThreadGroupsNum = Mathf.CeilToInt(wraper.GetBuffer("bodies").count / 1024f);
        }