C# 如何从WinRT Windows.Media API中获取全息镜头可定位相机视图和投影矩阵 < HOLOLNS的文档给出了如何使用媒体基础API在这里提取可定位的摄像机视图和投影矩阵的例子:

C# 如何从WinRT Windows.Media API中获取全息镜头可定位相机视图和投影矩阵 < HOLOLNS的文档给出了如何使用媒体基础API在这里提取可定位的摄像机视图和投影矩阵的例子:,c#,windows,windows-runtime,win-universal-app,hololens,C#,Windows,Windows Runtime,Win Universal App,Hololens,它声称这也可以通过WinRT API实现,并链接到此文档参考: 然而,这个类似乎没有任何API来检索扩展的全息透镜属性,只有默认的Windows Phone属性,如失真矩阵和针孔属性 Hololens文档是否不正确,是否根本无法在WinRT API中检索可定位相机元数据?还是我遗漏了什么 空间坐标系(第三个也是最后一个扩展的示例元数据属性)似乎可以作为MediaFrameReference.CoordinateSystem()使用,这使得这一点更加混乱…您可以将捕获的对象强制转换为接口。然后,您

它声称这也可以通过WinRT API实现,并链接到此文档参考:

然而,这个类似乎没有任何API来检索扩展的全息透镜属性,只有默认的Windows Phone属性,如失真矩阵和针孔属性

Hololens文档是否不正确,是否根本无法在WinRT API中检索可定位相机元数据?还是我遗漏了什么

空间坐标系(第三个也是最后一个扩展的示例元数据属性)似乎可以作为MediaFrameReference.CoordinateSystem()使用,这使得这一点更加混乱…

您可以将捕获的对象强制转换为接口。然后,您可以使用
MF\u WRAPPED\u SAMPLE\u SERVICE
作为服务GUID调用方法,这将为您提供本机服务。从中,可以检索文档中概述的3个摄影机属性(坐标系、视图变换和投影变换)


现在,你可以尝试通过手动声明这些接口来写C中的所有内容,但是在C++中更容易做到。

< P>我刚才遇到了同样的问题。摄像机的空间坐标系可通过MediaFrameReference.CoordinateSystem获得。但是,MediaFrameReference类中不提供投影矩阵。我通过在MediaFrameReference.Properties地图中查找投影矩阵解决了这个问题。基本思想显示,但我需要适应UWP的代码。我的工作代码如下所示

EXTERN_GUID(MFSampleExtension_Spatial_CameraProjectionTransform, 0x47f9fcb5, 0x2a02, 0x4f26, 0xa4, 0x77, 0x79, 0x2f, 0xdf, 0x95, 0x88, 0x6a);

MediaFrameReference^ frame = ...; // your frame
auto projectionTransformProperty= (Windows::Foundation::IPropertyValue^)frame->Properties->Lookup(MFSampleExtension_Spatial_CameraProjectionTransform);
Platform::Array<unsigned char>^ projectionMatrixByteArray = ref new Platform::Array<unsigned char>(4*4*4);
projectionTransformProperty->GetUInt8Array(&projectionMatrixByteArray);
float* projectionMatrixValues= reinterpret_cast<float*>(projectionMatrixByteArray->Data);
//projectionMatrixValues now contains the 16 entries of the projection matrix
外部GUID(MFSampleExtension\u Spatial\u CameraProjectionTransform、0x47f9fcb5、0x2a02、0x4f26、0xa4、0x77、0x79、0x2f、0xdf、0x95、0x88、0x6a); MediaFrameReference ^frame=…;//你的框架 auto projectionTransformProperty=(Windows::Foundation::IPropertyValue^)框架->属性->查找(MFSampleExtension\u Spatial\u CameraProjectionTransform); 平台::数组^projectionMatrixByteArray=ref新平台::数组(4*4*4); ProjectOnTransformProperty->GetUInt8Array(&ProjectionMatrix-ByteArray); float*ProjectionMatrix值=重新解释(ProjectionMatrix字节数组->数据); //ProjectionMatrix值现在包含投影矩阵的16个条目