protected override void Start()
        {
            edgesCount = nodesCount - 1;

            var nodes = new GPUNode[nodesCount];

            for (int i = 0; i < nodesCount; i++)
            {
                var n = nodes[i];
                var p = new Vector3(Random.value - 0.5f, i * edgeLength, Random.value - 0.5f);
                n.position = n.prev = p;
                n.decay    = 1f;
                nodes[i]   = n;
            }

            var edges = new GPUEdge[edgesCount];

            for (int i = 0; i < edgesCount; i++)
            {
                var e = edges[i];
                e.a      = i;
                e.b      = i + 1;
                e.length = edgeLength;
                edges[i] = e;
            }

            simulator = new GPUVerletSimulator(nodes, edges);

            base.Start();
        }
Example #2
0
        protected void Start()
        {
            var nodes = new GPUNode[tentaclesCount * divisionsCount];
            var edges = new List <GPUEdge>();

            for (int y = 0; y < tentaclesCount; y++)
            {
                var yoff = y * divisionsCount;
                for (int x = 0; x < divisionsCount - 1; x++)
                {
                    var idx = yoff + x;
                    var e   = new GPUEdge(idx, idx + 1, edgeLength);
                    edges.Add(e);
                }
            }

            simulator = new GPUVerletSimulator(nodes, edges.ToArray());

            tipMesh      = BuildTipMesh(1f);
            tentacleMesh = BuildTentacleMesh(divisionsCount, radialSegments);

            uint[] args = new uint[5] {
                0, 0, 0, 0, 0
            };

            args[0]       = tipMesh.GetIndexCount(0);
            args[1]       = (uint)tentaclesCount;
            tipArgsBuffer = new ComputeBuffer(1, sizeof(uint) * args.Length, ComputeBufferType.IndirectArguments);
            tipArgsBuffer.SetData(args);

            args[0]            = tentacleMesh.GetIndexCount(0);
            args[1]            = (uint)tentaclesCount;
            tentacleArgsBuffer = new ComputeBuffer(1, sizeof(uint) * args.Length, ComputeBufferType.IndirectArguments);
            tentacleArgsBuffer.SetData(args);

            Init();
        }