在ARKit中调整SCNNode的大小

3

我正在尝试使用SceneKit在ARKit中缩放一把三维椅子模型。以下是我的捏合手势代码:

 @objc func pinched(recognizer :UIPinchGestureRecognizer) {

        var deltaScale :CGFloat = 0.0

        deltaScale = 1 - self.lastScale - recognizer.scale

        print(recognizer.scale)

        let sceneView = recognizer.view as! ARSCNView
        let touchPoint = recognizer.location(in: sceneView)

        let scnHitTestResults = self.sceneView.hitTest(touchPoint, options: nil)

        if let hitTestResult = scnHitTestResults.first {

            let chairNode = hitTestResult.node

            chairNode.scale = SCNVector3(deltaScale,deltaScale,deltaScale)
            self.lastScale = recognizer.scale

        }

    }

它可以缩放,但由于某种奇怪的原因,它会将3D模型倒置。有什么想法吗?此外,尽管缩放功能可用,但在使用捏合手势进行多个进程时,缩放不够流畅,而且从不同的比例因子跳跃。

1个回答

13

这是我如何扩展我的节点:

/// Scales An SCNNode
///
/// - Parameter gesture: UIPinchGestureRecognizer
@objc func scaleObject(gesture: UIPinchGestureRecognizer) {

    let location = gesture.location(in: sceneView)
    let hitTestResults = sceneView.hitTest(location)
    guard let nodeToScale = hitTestResults.first?.node else {
        return
    }

    if gesture.state == .changed {

        let pinchScaleX: CGFloat = gesture.scale * CGFloat((nodeToScale.scale.x))
        let pinchScaleY: CGFloat = gesture.scale * CGFloat((nodeToScale.scale.y))
        let pinchScaleZ: CGFloat = gesture.scale * CGFloat((nodeToScale.scale.z))
        nodeToScale.scale = SCNVector3Make(Float(pinchScaleX), Float(pinchScaleY), Float(pinchScaleZ))
        gesture.scale = 1

    }
    if gesture.state == .ended { }

}

在我的例子中,当前节点是指一个SCNNode,虽然您可以根据需要进行设置。


谢谢!gesture.scale = 1这行代码的目的是什么? - john doe
关于拖动节点怎么样?例如,我需要触摸节点并在场景中移动它。 - iOS.Lover
嗨@BlackMirrorz,非常感谢你详细的回答!我和我的团队被一个问题卡住了好几天:/我发布了一个有趣的问题:https://stackoverflow.com/questions/63662318/arkit-apply-filter-cifilter-to-a-specific-part-vertex-of-an-arfaceanchor希望得到你的建议! - Roi Mulia
上帝保佑你,兄弟!这个完美地运行了! - Binaya Thapa Magar
这会相对于节点中心缩放节点,您能否提示如何根据捏合手势的中心缩放节点? - Petru Lutenco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接