我正在尝试理解通过MediaFrameReference类获取帧的转换。所得到的是一张带有关联空间坐标系和内在相机参数的图像。
为了计算图像中一个像素(U,V)的真实世界坐标(X,Y,Z),我认为只需访问代表从RGB相机到世界的变换矩阵的4x4矩阵即可。
为此,我找到了TryGetTransformTo(SpatialCoordinateSystem target)方法。如果我正确理解文档,那么我应该调用该方法来获取与图像相关联的图像坐标系。
非常感谢任何帮助。顺祝商祺。
为此,我找到了TryGetTransformTo(SpatialCoordinateSystem target)方法。如果我正确理解文档,那么我应该调用该方法来获取与图像相关联的图像坐标系。
image.CoordinateSystem.TryGetTransformTo(worldCoordinateSystem)
但我无法找到正确的方法来获取
worldCoordinateSystem
。 显然可定位相机文档中的一部分已经被删除了。我查看了微软的示例(HolographicFaceTracking),但我很难解释c++代码。所以对我来说并不是很有用。
在HoloLens的草图实验中,程序员使用了
var unityWorldCoordinateSystem = Marshal.GetObjectForIUnknown(WorldManager.GetNativeISpatialCoordinateSystemPtr()) as SpatialCoordinateSystem;
,但它被声明为过时。 使用这些信息和极好的谷歌搜索技巧,我找到了这个链接。 有一个类似的问题从未得到回答。
非常感谢任何帮助。顺祝商祺。
(SpatialCoordinateSystem)Marshal.GetObjectForIUnknown(WorldManager.GetNativeISpatialCoordinateSystemPtr())
。但是,如果您不想使用UnityEngine.XR.WSA API,因为它已被标记为过时,可以使用"SpatialLocator"作为替代方案。您可以使用SpatialLocator.GetDefault().CreateStationaryFrameOfReferenceAtCurrentLocation().CoordinateSystem()
来创建一个坐标系,其中原点位于设备位置上启动应用程序时的位置。 - Hernando - MSFT