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();
        }
Example #3
0
        protected override void Start()
        {
            nodesCount = rows * columns;

            var nodes = new GPUNode[nodesCount];

            var hCols = columns * 0.5f;

            for (int y = 0; y < rows; y++)
            {
                bool stable = (y == 0);
                var  yoff   = y * columns;

                for (int x = 0; x < columns; x++)
                {
                    var idx = yoff + x;
                    var n   = nodes[idx];
                    n.position = n.prev =
                        (Vector3.forward * y * edgeLength) +
                        (Vector3.right * (x - hCols) * edgeLength);
                    n.decay    = 1f;
                    n.stable   = (uint)(stable ? 1 : 0);
                    nodes[idx] = n;
                }
            }

            var edges = new List <GPUEdge>();

            for (int y = 0; y < rows; y++)
            {
                var yoff = y * columns;
                if (y != rows - 1)
                {
                    for (int x = 0; x < columns; x++)
                    {
                        var idx = yoff + x;
                        if (x != columns - 1)
                        {
                            var right = idx + 1;
                            edges.Add(new GPUEdge(idx, right, edgeLength));
                        }
                        var down = idx + columns;
                        edges.Add(new GPUEdge(idx, down, edgeLength));
                    }
                }
                else
                {
                    for (int x = 0; x < columns - 1; x++)
                    {
                        var idx   = yoff + x;
                        var right = idx + 1;
                        edges.Add(new GPUEdge(idx, right, edgeLength));
                    }
                }
            }

            edgesCount = edges.Count;

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

            base.Start();
        }