使用HoloLens 2获取空间坐标系的正确方法



因此,我正试图从通过MediaFrameReference类获取的帧中获得转换。我得到的是一张带有相关空间坐标系和内在相机参数的图像。为了计算图像(U,V(中像素的真实世界坐标(X,Y,Z(,我认为访问4x4Matrix就足够了,它表示从RGB相机到世界的变换矩阵。

为此,我找到了TryGetTransformTo(空间坐标系统目标(方法。如果我正确理解文档,我会将图像坐标系连接到图像上,所以我会调用

image.CoordinateSystem.TryGetTransformTo(worldCoordinateSystem)

  • 但我就是找不到正确的方法来获取worldCoordinateSystem。显然,可定位摄像头文档中有一部分被删除了。

  • 我检查了微软的例子(HolographicFaceTracking(,但我在解释c++代码方面非常糟糕。所以这对我来说不是很有用。

  • 在HoloLens的Sketchy实验中,程序员使用var unityWorldCoordinateSystem = Marshal.GetObjectForIUnknown(WorldManager.GetNativeISpatialCoordinateSystemPtr()) as SpatialCoordinateSystem;,但它被声明为已过时。使用这些信息和非常好的谷歌搜索技巧,我找到了这个链接。还有一个类似的问题却一直没有得到回答。

我的问题是,获取我需要的空间坐标系的最有效方法是什么。我正在使用Unity 2018.4.22f1和Visual Studio 2019。

非常感谢您的帮助。致以亲切的问候。

建议使用PhotoCapture类来捕捉图片,PhotoCaptureFrame的TryGetCameraToWorldMatrix方法将使获取照片时相机到世界矩阵要填充的Matrixx4变得容易。您可以参考此链接了解有关如何使用它的更多信息:UnityEngine.Windows.WebCam.PhotoCapture

按照指南,当你调用异步方法TakePhotoAsync(onCapturedPhotoToMemoryCallback(时,你需要传入一个函数作为参数,一旦照片存储到内存中,就会调用它。在这个函数中,您将获得一个PhotoCaputrerFrame实例作为参数。最后,在此参数上调用PhotoCaptureFrame.TryGetCameraToWorldMatrix,以获取在拍摄照片时由相机到世界矩阵填充的矩阵。

此外,对于MR文档的早期版本,它已经演示了如何使用着色器代码在相机图像上的特定三维位置进行查找或绘制,您可以在GitHub提交历史记录中找到它:mixed-reality docs/locatable-camera.md.

相关内容

最新更新