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