Пример #1
0
    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();
    }
Пример #2
0
 public VertTriList(int[] tri, int numVerts) => Init(tri, numVerts);