【问题标题】:Swift 3 - SceneKit get 3d model X Y Z rotation ValueSwift 3 - SceneKit 获取 3d 模型 X Y Z 旋转值
【发布时间】:2017-11-18 14:43:06
【问题描述】:

我有一个sceneView,我在其中加载了一个 3d 模型。模型显示良好,我可以控制它触摸屏幕。

我需要的是在 3d 模型旋转时获取 X、Y、Z 旋转的值。

如何实时获取这些值?

我尝试使用带有手势识别器的相机旋转,但它们没有更新。

override func viewDidLoad() {
        super.viewDidLoad()

        sceneView.scene = SCNScene(named: "PKB2");

        sceneView.autoenablesDefaultLighting = true
        sceneView.allowsCameraControl = true

        // add a tap gesture recognizer
        let tapGesture = UITapGestureRecognizer(target: self, action:
            #selector(handleTap(_:)))
        sceneView.addGestureRecognizer(tapGesture)

    }


    func handleTap(_ gestureRecognize: UIGestureRecognizer) {
        // retrieve the SCNView

        let cameraNode = SCNNode()
        cameraNode.camera = SCNCamera()

        print(cameraNode.rotation)

    }

【问题讨论】:

    标签: ios 3d rotation scenekit collada


    【解决方案1】:

    在您的handleTap(_:)中,您正在创建一个相机。此相机的位置和旋转(或包含相机的节点的旋转)与用于渲染场景的相机的旋转无关。 当您在视图上将 allowsCameraControl 设置为 true 时,SceneKit 正在创建一个用户可以通过触摸事件控制的新相机。

    您可以使用SCNView 符合的SCNSceneRenderer 协议的pointOfView 属性获取包含当前用于渲染视图的相机的节点。

    func handleTap(_ gestureRecognize: UIGestureRecognizer) {
        let cameraNode: SCNNode? = sceneView.pointOfView
        print(cameraNode?.rotation ?? "There is no camera set to the view")
    } 
    

    【讨论】:

    • 谢谢.. 明白了。有没有办法在用两根手指移动物体时只禁用相机的位置?我只想启用旋转和缩放
    • 在使用 allowsCameraControl 时不可用。 SceneKit 团队仅将此属性视为调试工具。 iOS 11 添加了许多有用的功能来控制相机,但现在您必须手动响应事件并更改节点位置。以this发帖为起点
    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多