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(); }
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(); }
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(); }