如何在水平和垂直平面检测之间切换焦距平方?

时间:2019-04-04 17:45:18

标签: ios swift arkit

我一直在尝试ARKit,并且一直在尝试调整Apple的对焦范围以在水平和垂直平面检测之间切换。目标是首先在水平面上进行测量,在其上放置一个节点(例如在地板上),然后立即切换到垂直平面检测,并且焦点正方形现在也垂直定向。

希望有人可以阐明如何最好地解决这个问题。

我一直在使用怀特史密斯公司对Apple Focus Square的实现作为起点:https://github.com/whitesmith/MeasureThings

我在一些地方修改了代码,以尝试实现所需的行为。

我正在尝试从视图控制器中的handleTapGesture(sender:UITapGestureRecognizer)将Focus Square加载到适当的方向,期望的行为是第一次单击将节点放置在水平面上,然后将方向切换为垂直方向,第二次单击将节点放置在垂直平面上。

我尝试过向FocusSquare类添加一种方法,该方法可重新初始化焦点正方形,但是会产生意外的行为,例如同时具有水平和垂直焦点正方形,或者根本没有。

要获得垂直焦点平方,只需将planeNode.eulerAngles更改为以下值即可达到所需的结果。

planeNode.eulerAngles = SCNVector3Make(Float.pi / 1.0, 0, 0) // Vertical

在ViewController类之内

// Configuration - Vertical Plane Detection Enabled

viewDidLoad() 
    let configuration = ARWorldTrackingConfiguration()
    configuration.planeDetection = [.horizontal, .vertical]

在FocusSqaure类中

// Vertical planeNode eulerAngles added 
// state parameter added to focusSquareNode method for if statement between vertical & horizontal angles.

func focusSquareNode(state: Bool) -> SCNNode {
if state == true {
planeNode.eulerAngles = SCNVector3Make(Float.pi / 2.0, 0, 0) // Horizontal
        print("eulerAngles Horizontal")
        } else {
        planeNode.eulerAngles = SCNVector3Make(Float.pi / 1.0, 0, 0) // Vertical
 print("eulerAngles Vertical")
                    }

}

extension  FocusSquare {
func planeChanged(measuringHorizontalPlane: Bool, sender: String) {
     print("CALLED!! PlaneChangedFocusSquare, is measuringHorizontalPlane = \(measuringHorizontalPlane), sender = \(sender)")

        isHorizontal = measuringHorizontalPlane

        self.addChildNode(focusSquareNode(state: measuringHorizontalPlane))
        open()
        lastPositionOnPlane = nil
        lastPosition = nil
        recentFocusSquarePositions = []
        anchorsOfVisitedPlanes = []

    }

预期结果:在水平和垂直平面之间切换焦点正方形

实际结果:水平和垂直焦点框同时出现或根本不出现。

0 个答案:

没有答案