Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Kinect v2+Unity->MapDepthFrameToColorSpaceUsingIntPtr_C#_Unity3d_Kinect - Fatal编程技术网

C# Kinect v2+Unity->MapDepthFrameToColorSpaceUsingIntPtr

C# Kinect v2+Unity->MapDepthFrameToColorSpaceUsingIntPtr,c#,unity3d,kinect,C#,Unity3d,Kinect,我试图将KinectV2中的深度数据映射到Unity脚本中的颜色空间。 它与通常的坐标映射器功能一样工作 _sensor.CoordinateMapper.MapDepthFrameToColorSpace_depthData,_colorSpacePoints 但是它把我的帧率降低了11,这是不可接受的= 因此,我查看了微软提供的unity示例,并找到了一些 使用指针进行映射 var pDepthData=GCHandle.allocDepthBuffer,GCHandleType.pinte

我试图将KinectV2中的深度数据映射到Unity脚本中的颜色空间。 它与通常的坐标映射器功能一样工作

_sensor.CoordinateMapper.MapDepthFrameToColorSpace_depthData,_colorSpacePoints

但是它把我的帧率降低了11,这是不可接受的=

因此,我查看了微软提供的unity示例,并找到了一些 使用指针进行映射

var pDepthData=GCHandle.allocDepthBuffer,GCHandleType.pinted; var pDepthCoordinates data=GCHandle.Allocm_pDepthCoordinates,GCHandleType.pinted; m_pCoordinateMapper.MapColorFrameToDeptHSPaceUsingIntr pDepthData.AddRofPindedObject, uintDepthBuffer.Length*SizeOfUsort, pDepthCoordinationData.AddRofPindedObject, uintm_pDepthCoordinates.Length; pdepthcoordinancedata.Free; pDepthData.Free; 对于我的需求,也存在同等的方法。我尝试了指针版本的 MapDepthFrameToColor空间

var pDepthData=GCHandle.allocDepthBuffer,GCHandleType.pinted; var pColorData=GCHandle.Allocm_pColorSpacePoints,GCHandleType.pinted; m_pCoordinateMapper.MapDepthFrameToColorSpaceUsingIntPtr pDepthData.AddRofPindedObject, pDepthBuffer.Length*SizeofShort, pColorData.AddRofPindedObject, uintm_pColorSpacePoints.Length*sizeoffloat*2; pColorData.Free; pDepthData.Free; pDepthBuffer在方法调用时具有有效数据,并且m_pColorSpacePoints已初始化并 与MSDN文档中建议的pDepthBuffer长度相同 我仍然在使用1408SDK版本。 函数后的结果是一个数组,该数组的浮点值为空/负,且没有有效的 彩色空间点。也没有错误消息。
有什么建议吗?

我让它起作用了。更新到最新SDK版本1409后,messageall返回错误消息

ArgumentException:值不在预期范围内。 Rethrow as ArgumentException:此API已从HRESULT返回异常:0x80070057

所以我对参数做了一些调整,现在我得到了有效的数据

下面是我对绿屏示例的CoordinateMapperManager的修改。我加了一个缓冲区 对于映射的颜色值,通过深度值位置获得HD颜色流中的像素位置

//添加了声明和初始化 私有ColorSpacePoint[]m_pColorSpacePoints; //清醒法 m_pColorSpacePoints=新的颜色空间点[pDepthBuffer.Length]; //根据颜色空间点 公共ColorSpacePoint[]GetColorSpacePointBuffer { 返回m_pColorSpacePoints; } //新的过程框架法 空处理框架 { var pDepthData=GCHandle.allocDepthBuffer,GCHandleType.pinted; var pDepthCoordinates data=GCHandle.Allocm_pDepthCoordinates,GCHandleType.pinted; var pColorData=GCHandle.Allocm_pColorSpacePoints,GCHandleType.pinted; m_pCoordinateMapper.MapColorFrameToDeptHSPaceUsingIntr pDepthData.AddRofPindedObject, uintDepthBuffer.Length*SizeOfUsort, pDepthCoordinationData.AddRofPindedObject, uintm_pDepthCoordinates.Length; m_pCoordinateMapper.MapDepthFrameToColorSpaceUsingIntPtr pDepthData.AddRofPindedObject, pDepthBuffer.Length*SizeofShort, pColorData.AddRofPindedObject, uintm_pColorSpacePoints.Length; pColorData.Free; pdepthcoordinancedata.Free; pDepthData.Free; m_pColorRGBX.LoadRawTextureDatapColorBuffer; m_pColorRGBX.Apply; } 下面是一个如何使用它的示例。我使用Untiy在GPU着色器中进行渲染。以下 代码是一段简短的未经测试的代码,用于演示如何获取数据:

//Kinect V2深度流的大小 var _width=512; var_高度=424; var _particleCount=_width*_height; //初始化数组以存储粒子的位置数据 var_particleArray=新向量3[_particleCount]; var_colorArray=新颜色[_particleCount]; //获取深度数据 var_depthData=_coordinateMapperManager.GetDepthPointBuffer; //获取映射的颜色空间点 var_colorSpacePoints=_coordinateMapperManager.GetColorSpacePointBuffer; //获取颜色流作为纹理 var_texture=_coordinateMapperManager.GetColorTexture; var c=0; 对于var i=0;i<\u身高++我 { 对于var j=0;j<_宽度;++j { _particleArray[c++]=新向量3j,i; } } 对于var i=0;i<\u depthData.Length++我 { _colorArray[i]=\u纹理.GetPixelint\u颜色空间点[i].X,int\u颜色空间点[i].Y; _particleArray[i].z=_depthData[i]; } //现在我们有了构建彩色3D点云的所有数据