【问题标题】:Swift 3 - SceneKit Get 3d model scale valueSwift 3 - SceneKit 获取 3d 模型比例值
【发布时间】:2017-11-19 08:51:16
【问题描述】:

我正在尝试获取加载到sceneView 中的 3d 对象的值,同时使用两根手指对其进行缩放。我可以正确获取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

    }

【问题讨论】:

    标签: swift3 3d scale scenekit


    【解决方案1】:

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

    因此检查相机的比例是错误的,因为比例没有改变,只是放大了。

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


    另外值得注意的是,allowsCameraControl 状态的文档:

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

    【讨论】:

    • 谢谢。我了解您指出正在移动的实际上是相机视图。使用 xFov 我可以看到相机变焦。那么我应该如何控制物体而不是相机的旋转和缩放?您可以指出我的任何堆栈或教程吗?
    • 将您自己的手势识别器添加到场景中以进行平移和捏合,并使用平移和缩放值。您可能仍想移动相机而不是对象,但使用您自己的手势会给您更多的控制权。
    猜你喜欢
    • 2017-11-18
    • 2018-03-13
    • 2016-02-29
    • 1970-01-01
    • 2021-02-08
    • 2023-03-27
    • 2019-03-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多