按下按钮后第三次放置3D对象不起作用

时间:2017-08-20 05:41:04

标签: ios swift arkit

我以编程方式向我的ARSCNView添加了一个按钮,并添加了一个在被点击时调用的函数。该函数创建并放置一个3D对象。按钮第一次按下时按钮完美无缺,但第二次按钮不会放置我的物体。

这是我的代码:

private var button = UIButton()

override func viewDidLoad() {
    super.viewDidLoad()

    // Set the view's delegate
    sceneView.delegate = self

    button.setTitle("Body", for: button.state)
    button.frame = CGRect(x: 100, y: 25, width: 100, height: 25)
    button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
    view.addSubview(button)
}

@objc func buttonAction(sender: UIButton!) {
        self.createPlaneNode()
}

func createPlaneNode() {
    //Create a new scene with our 3D object in it
    print("Hi")
    //This prints everytime the button is pressed, I checked.


    let object = SCNScene(named: "art.scnassets/manbody.obj")
    let node = SCNNode()
    let nodeArray = object!.rootNode.childNodes

    for childNode in nodeArray {
        node.addChildNode(childNode)
    }

    guard let currentFrame = sceneView.session.currentFrame else {
        return
    }
    var translation = matrix_identity_float4x4
    translation.columns.3.z = -0.1 // Translate 10 cm in front of the camera
    node.simdTransform = simd_mul(currentFrame.camera.transform, translation)

    // SCNPlanes are vertically oriented in their local coordinate space.
    // Rotate it to match the horizontal orientation of the ARPlaneAnchor.

    node.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
    sceneView.scene.rootNode.addChildNode(node)
}

1 个答案:

答案 0 :(得分:1)

它第二次工作,检查多边形计数。 ;)

但是,当您继续将对象放在同一个地方时,您无法看到后续调用的结果。

您可以在此处正确设置新位置:

node.simdTransform = simd_mul(currentFrame.camera.transform, translation)

然后你在下一行覆盖变换:

node.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)

请注意,node.simdTransformnode.transform只是对同一事物的不同“观点”。

更改节点的轴以改为应用旋转,或者将变换乘以而不是覆盖它。