Unity3d 在ARcore的任何地方检测点

Unity3d 在ARcore的任何地方检测点,unity3d,arcore,Unity3d,Arcore,我正在使用unity,我只是希望AR core绘制并测量2个点之间的距离,但其工作正常,但点始终位于检测到的平面上…我的需要是在任何位置检测点,而不是像此应用程序一样检测到检测到的平面。 我发现了一些与FeaturePoint相关的东西,但我知道的不多,因为我是ARcore的新手 我试着在示例项目中的HElloAR脚本中注释trackablehitflag.planewithpolygon TrackableHit hit; TrackableHitFlags ray

我正在使用unity,我只是希望AR core绘制并测量2个点之间的距离,但其工作正常,但点始终位于检测到的平面上…我的需要是在任何位置检测点,而不是像此应用程序一样检测到检测到的平面。 我发现了一些与FeaturePoint相关的东西,但我知道的不多,因为我是ARcore的新手

我试着在示例项目中的HElloAR脚本中注释
trackablehitflag.planewithpolygon

  TrackableHit hit;
            TrackableHitFlags raycastFilter =TrackableHitFlags.FeaturePointWithSurfaceNormal;
           // TrackableHitFlags.PlaneWithinPolygon 
            if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit))
            {
                // Use hit pose and camera pose to check if hittest is from the
                // back of the plane, if it is, no need to create the anchor.
             /*   if ((hit.Trackable is DetectedPlane) &&
                    Vector3.Dot(FirstPersonCamera.transform.position - hit.Pose.position,
                        hit.Pose.rotation * Vector3.up) < 0)
                {
                    Debug.Log("Hit at back of the current DetectedPlane");
                }*/
             //   else
             //   {
                    // Choose the Andy model for the Trackable that got hit.
                    GameObject prefab;
                //    if (hit.Trackable is FeaturePoint)
                    //{
                        prefab = AndyPointPrefab;
                   // }
                    //else
                    //{
                  //      prefab = AndyPlanePrefab;
                    //}

                    // Instantiate Andy model at the hit pose.
                    var andyObject = Instantiate(prefab, hit.Pose.position, hit.Pose.rotation);
    }
TrackableHit;
TrackableHitFlags raycastFilter=TrackableHitFlags.FeaturePointWithSurfaceNormal;
//TrackableHitFlags.PlaneWithinPolygon
if(Frame.Raycast(touch.position.x、touch.position.y、raycastFilter、out-hit))
{
//使用命中姿势和相机姿势检查命中测试是否来自
//如果是平面的背面,则无需创建锚定。
/*如果((检测到hit.Trackable平面)&&
向量3.Dot(FirstPersonCamera.transform.position-hit.Pose.position,
hit.Pose.rotation*矢量3.up)<0)
{
Log(“命中当前检测平面的背面”);
}*/
//否则
//   {
//为被击中的可追踪物体选择安迪模型。
游戏对象预制;
//if(hit.Trackable是FeaturePoint)
//{
预制=和点预制;
// }
//否则
//{
//预制=和平面预制;
//}
//在命中姿势实例化Andy模型。
var和yobject=实例化(预置,hit.Pose.position,hit.Pose.rotation);
}

在禁用featurepoint命中标记上甚至没有实例化点以放置点之后,有几种方法可以添加不在某个位置上的点,例如,可以在视图中相对于相机的任何位置放置锚定,而不依赖于平面

问题在于点的深度。在下图中,从2D角度看,所有线条的长度都完全相同,但很明显,用户可能试图测量不同深度的项目

当相对于相机放置定位点时,必须明确指定深度。例如,将其放置在相机预览的中心,深度为2米

如果您能够确保用户添加的每个锚点位于已知深度,或具有指定的深度值,则您应该能够添加具有3d世界坐标的锚点并进行测量。不幸的是,对于实际工作应用程序,这通常是不可能的,因为用户不知道深度,并且当前设备没有深度传感器


有一些框架正在考虑将深度感应添加到只有摄像头的设备上,例如没有专用深度感应硬件的智能手机。一个(商业)示例为6D:

对于放置点,有几种方法可以添加不在某个位置上的点,例如,可以在视图中相对于相机的任何位置放置锚定,而不依赖于平面

问题在于点的深度。在下图中,从2D角度看,所有线条的长度都完全相同,但很明显,用户可能试图测量不同深度的项目

当相对于相机放置定位点时,必须明确指定深度。例如,将其放置在相机预览的中心,深度为2米

如果您能够确保用户添加的每个锚点位于已知深度,或具有指定的深度值,则您应该能够添加具有3d世界坐标的锚点并进行测量。不幸的是,对于实际工作应用程序,这通常是不可能的,因为用户不知道深度,并且当前设备没有深度传感器

有一些框架正在考虑将深度感应添加到只有摄像头的设备上,例如没有专用深度感应硬件的智能手机。一个(商业)示例是6D: