public void AddInDeformingForce(Vector3 point, float force) { point = transform.InverseTransformPoint(point); if (lastPoint == Vector3.zero) { lastPoint = point; } else if (lastPoint != Vector3.zero && lastPoint != point) { lastPoint = point; ClearVertexVelocities(); } Dispatch(force, point); //根据Shader返回的buffer数据更新物体信息 DBuffer[] values = new DBuffer[bufferArrayLength]; buffer.GetData(values); for (int i = 0; i < bufferArrayLength; i++) { displacedVertices[i] = values[i].vertexPos; } deformingMesh.vertices = displacedVertices; deformingMesh.RecalculateNormals(); collider.sharedMesh = deformingMesh; }
void CreateBuffer() { //count数组的长度(等于2个三维的积 2x2x1 * 2x2x1),40是结构体的字节长度 buffer = new ComputeBuffer(bufferArrayLength, 12); DBuffer[] values = new DBuffer[bufferArrayLength]; for (int i = 0; i < bufferArrayLength; i++) { DBuffer m = new DBuffer(); SetStruct(ref m, displacedVertices[i]); values[i] = m; } // 初始化结构体并赋予buffer buffer.SetData(values); }
static async Task Main(string[] args) { var systemName = "distributed-environment-name"; var conf = Config.GetDockerConfigString(systemName); var env = await DistributedEnvironment.Initialize(systemName, conf); //var dInt = new DInt("int-name", env); //await Task.Delay(5000); //for (int i = 0; i < 100; i++) //{ // Console.WriteLine(await dInt.AddAsync(1)); // await Task.Delay(100); //} //if (bool.Parse(Environment.GetEnvironmentVariable("IS_PROD"))) //{ // for (int i = 0; i < 50; i++) // { // await Task.Delay(100); // var count = await dInt.AddAsync(1); // Console.WriteLine($"Current count: {count}"); // } //} //else //{ // for (int i = 0; i < 100; i++) // { // var whatIGet = await dInt.SubtractIfResultIsPositive(5); // Console.WriteLine($"Count decreased to: {whatIGet}"); // } //} var hostname = Environment.GetEnvironmentVariable("HOSTNAME"); var rand = new Random(); var buffer = new DBuffer <string>(5, "buffer-name", env); await Task.Delay(5000); if (bool.Parse(Environment.GetEnvironmentVariable("IS_PROD"))) { for (int i = 0; i < 50; i++) { await Task.Delay(TimeSpan.FromMilliseconds(rand.Next() % 500 + 100)); await buffer.Add($"{hostname} : <{i}>"); Console.WriteLine($"Producing >>>>>>>> [{hostname} : <{i}>]"); } } else { for (int i = 0; i < 100; i++) { await Task.Delay(TimeSpan.FromMilliseconds(rand.Next() % 500 + 500)); var whatIGet = await buffer.Take(); Console.WriteLine($"Consuming <<<<<<<< [{whatIGet}]"); } } await Task.Delay(-1); }
void SetStruct(ref DBuffer m, Vector3 vertexPos) { m.vertexPos = vertexPos; }