Swift 3 - SceneKit获取3d模型比例值

时间:2017-06-16 14:17:27

标签: swift3 3d scale scenekit

我试图在使用两根手指缩放时将3d对象的值加载到sceneView中。我可以正确地获取rotationpositionorientation,但scale始终保持在1

如何获得此值?

var update = Timer()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        sceneView.scene = SCNScene(named: "PKB2");
        sceneView.debugOptions.insert(SCNDebugOptions.showWireframe)
        sceneView.autoenablesDefaultLighting = true
        sceneView.allowsCameraControl = true

        update = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(self.updateFunc), userInfo: nil, repeats: true)

    } 

func updateFunc() {

        var eulerAngles_x = Double((sceneView.pointOfView?.eulerAngles.x)!) * (180.0 / Double.pi)
        if( eulerAngles_x < 0 ) {eulerAngles_x += 360.0}

        var eulerAngles_y = Double((sceneView.pointOfView?.eulerAngles.y)!) * (180.0 / Double.pi)
        if( eulerAngles_y < 0 ) {eulerAngles_y += 360.0}

        var eulerAngles_z = Double((sceneView.pointOfView?.eulerAngles.z)!) * (180.0 / Double.pi)
        if( eulerAngles_z < 0 ) {eulerAngles_z += 360.0}

        x_lbl.text = String(format:"%.2f", eulerAngles_x)
        y_lbl.text = String(format:"%.2f", eulerAngles_y)
        z_lbl.text = String(format:"%.2f", eulerAngles_z)
        w_lbl.text = String(format:"%.2f", (sceneView.pointOfView?.scale.z)!)

        print(sceneView.pointOfView?.scale) // not changing while scaling the object

    }

1 个答案:

答案 0 :(得分:0)

使用sceneView.allowsCameraControl = true时,您正在操作相机,而不是对象。您的3D物体没有移动,相机正在四处移动。

因此检查相机的比例是错误的,因为比例不变,它只是放大。

请尝试检查sceneView.pointOfView?.camera.xFovsceneView.pointOfView?.camera.yFov

同样值得注意的是allowsCameraControl状态的文档:

  

请注意,此属性的主要用途是帮助调试   你的申请。您可能想要实现自己的相机控制器   适合您的应用。