Exemple #1
0
    public void UpdateDepthTexture(DepthFrame depthFrame)
    {
        if (depthFrame == null)
        {
            return;
        }
        // 拷贝深度流数据
        if (_depthFrameData == null || _depthFrameData.Length != depthFrame.Width * depthFrame.Height)
        {
            _depthFrameData = new short[depthFrame.Width * depthFrame.Height];
        }
        depthFrame.CopyData(ref _depthFrameData);

        // 深度纹理
        if (_depthTexture == null)
        {
            _depthTexture = new Texture2D(depthFrame.Width, depthFrame.Height, TextureFormat.RGB24, false);
        }
        else if (_depthTexture.width != depthFrame.Width || _depthTexture.height != depthFrame.Height)
        {
            _depthTexture.Resize(depthFrame.Width, depthFrame.Height, TextureFormat.RGB24, false);
        }

        if (_depthTextureBuffer == null || _depthTextureBuffer.Length != depthFrame.Width * depthFrame.Height * 3)
        {
            _depthTextureBuffer = new byte[depthFrame.Width * depthFrame.Height * 3];
        }
        int length = _depthFrameData.Length;

        for (int i = 0; i < length; i++)
        {
            short depth     = _depthFrameData[i];
            byte  depthByte = (byte)0;
            if (depth != 0)
            {
                depthByte = (byte)(255 - (255 * depth / 10000.0f));
            }
            _depthTextureBuffer[i * 3 + 0] = depthByte;
            _depthTextureBuffer[i * 3 + 1] = depthByte;
            _depthTextureBuffer[i * 3 + 2] = depthByte;
        }

        if (_depthTextureBuffer != null && _depthTextureBuffer.Length > 0)
        {
            _depthTexture.LoadRawTextureData(_depthTextureBuffer);
            _depthTexture.Apply(false);
        }
    }