我想知道HoloLens区分表面的能力。更具体地说,我想知道用户注视的是什么类型的表面,无论是水平表面(即桌面,地板,天花板)还是垂直表面(即墙壁)。我想知道是否有任何内置函数来检测这个或如何我可以去实现一个 - 我不太确定从哪里开始。 (我一直在谷歌上搜索一段时间无济于事。)
答案 0 :(得分:2)
其他想法会起作用,但却忽略了微软提供的观点。您应该使用HoloToolkit(Direct3d / C ++)或HoloToolkit for Unity(Unity3d / C#)。
https://github.com/microsoft/HoloToolkit
https://github.com/microsoft/HoloToolkit-Unity
每个都有
的概念SpatialMapping + PlaneFinding:
https://github.com/Microsoft/HoloToolkit-Unity/tree/master/Assets/HoloToolkit/SpatialMapping
https://github.com/Microsoft/HoloToolkit/tree/master/SpatialMapping/PlaneFinding
和
SpatialMapping + SpatialUnderstanding:
https://github.com/Microsoft/HoloToolkit-Unity/tree/master/Assets/HoloToolkit/SpatialUnderstanding
https://github.com/Microsoft/HoloToolkit/tree/master/SpatialUnderstanding/Src
Plane Finding将满足您的需求,但Spatial Understanding可以提供一定程度的复杂性,帮助您更好地实现目标。无论哪种方式,都要聪明地工作并使用微软提供的SDK。
答案 1 :(得分:0)
在映射上使用光线投射,然后使用RaycastHit对象中的法线。
https://docs.unity3d.com/ScriptReference/RaycastHit-normal.html
然后将法线与Dot产品与Up向量进行比较。如果接近1,那么你有一个水平面,如果接近0,你有一个垂直面。