private void RefreshData(ushort[] depthData, int colorWidth, int colorHeight) { var frameDesc = _Sensor.DepthFrameSource.FrameDescription; ColorSpacePoint[] colorSpace = new ColorSpacePoint[depthData.Length]; _Mapper.MapDepthFrameToColorSpace(depthData, colorSpace); // shader输入参数 tri[] values = new tri[_TrianglesTemplate.Length / 3]; for (int i = 0; i < _TrianglesTemplate.Length / 3; i++) { values[i].index1 = _TrianglesTemplate[i * 3 + 0]; values[i].index2 = _TrianglesTemplate[i * 3 + 1]; values[i].index3 = _TrianglesTemplate[i * 3 + 2]; values[i].depth1 = (int)depthData[IndexTrans(values[i].index1, _DownsampleSize, frameDesc.Width, frameDesc.Height)] / 1000.0f; values[i].depth2 = (int)depthData[IndexTrans(values[i].index2, _DownsampleSize, frameDesc.Width, frameDesc.Height)] / 1000.0f; values[i].depth3 = (int)depthData[IndexTrans(values[i].index3, _DownsampleSize, frameDesc.Width, frameDesc.Height)] / 1000.0f; values[i].p1 = new Vector3(0, 0, 0); values[i].p2 = new Vector3(0, 0, 0); values[i].p3 = new Vector3(0, 0, 0); } // compute shader计算 _Buffer.SetData(values); Dispatch(frameDesc.Width, frameDesc.Height); // 根据Shader返回的buffer数据更新mesh tri[] result = new tri[_TrianglesTemplate.Length / 3]; _Buffer.GetData(result); _Vertices = new Vector3[_TrianglesTemplate.Length]; _Vertices = new Vector3[_TrianglesTemplate.Length]; for (int i = 0; i < result.Length; i++) { _Vertices[i * 3 + 0] = result[i].p1; _Vertices[i * 3 + 1] = result[i].p2; _Vertices[i * 3 + 2] = result[i].p3; var colorSpacePoint = colorSpace[IndexTrans(result[i].index1, _DownsampleSize, frameDesc.Width, frameDesc.Height)]; _UV[i * 3 + 0] = new Vector2(colorSpacePoint.X / colorWidth, colorSpacePoint.Y / colorHeight); colorSpacePoint = colorSpace[IndexTrans(result[i].index2, _DownsampleSize, frameDesc.Width, frameDesc.Height)]; _UV[i * 3 + 1] = new Vector2(colorSpacePoint.X / colorWidth, colorSpacePoint.Y / colorHeight); colorSpacePoint = colorSpace[IndexTrans(result[i].index3, _DownsampleSize, frameDesc.Width, frameDesc.Height)]; _UV[i * 3 + 2] = new Vector2(colorSpacePoint.X / colorWidth, colorSpacePoint.Y / colorHeight); _Triangles[i * 3 + 0] = result[i].index1; _Triangles[i * 3 + 1] = result[i].index2; _Triangles[i * 3 + 2] = result[i].index3; } _Mesh.vertices = _Vertices; _Mesh.uv = _UV; _Mesh.triangles = _Triangles; _Mesh.RecalculateNormals(); }
public VertTriList(int[] tri, int numVerts) => Init(tri, numVerts);