Swift3 Swift 3-SceneKit获取三维模型比例值

Swift3 Swift 3-SceneKit获取三维模型比例值,swift3,3d,scale,scenekit,Swift3,3d,Scale,Scenekit,我正在尝试获取加载到sceneView中的3d对象的值,同时使用两个手指对其进行缩放。我可以正确获得旋转、位置和方向,但是比例始终保持在1上 我怎样才能得到这个值 var update = Timer() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib.

我正在尝试获取加载到
sceneView
中的3d对象的值,同时使用两个手指对其进行缩放。我可以正确获得
旋转
位置
方向
,但是
比例
始终保持在
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

    }
var update=Timer()
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
sceneView.scene=SCNScene(命名为:“PKB2”);
sceneView.debugOptions.insert(SCNDebugOptions.showWireframe)
sceneView.autoenablesDefaultLighting=true
sceneView.allowsCameraControl=true
update=Timer.scheduledTimer(时间间隔:0.01,目标:self,选择器:#选择器(self.updateFunc),userInfo:nil,repeats:true)
} 
func updateFunc(){
var eulerAngles_x=Double((sceneView.pointOfView?.eulerAngles.x)!)*(180.0/Double.pi)
如果(eulerAngles_ux<0){eulerAngles_x+=360.0}
var eulerAngles_y=Double((sceneView.pointOfView?.eulerAngles.y)!)*(180.0/Double.pi)
如果(eulerAngles_y<0){eulerAngles_y+=360.0}
var eulerAngles_z=Double((sceneView.pointOfView?.eulerAngles.z)!)*(180.0/Double.pi)
如果(eulerAngles_z<0){eulerAngles_z+=360.0}
x_lbl.text=字符串(格式:“%.2f”,eulerAngles_x)
y_lbl.text=字符串(格式:“%.2f”,eulerAngles_y)
z_lbl.text=字符串(格式:“%.2f”,eulerAngles_z)
w_lbl.text=字符串(格式:“%.2f”,(sceneView.pointOfView?.scale.z)!)
打印(sceneView.pointOfView?.scale)//缩放对象时不更改
}

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

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

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


另外值得注意的是,
allowsCameraControl
的文档说明:

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


非常感谢。我理解你的观点,移动的实际上是摄像机的视角。使用xFov,我可以看到相机变焦。那么,我应该如何控制对象的旋转和缩放,而不是相机?你能给我指出来的任何堆栈或教程吗?将你自己的手势识别器添加到场景中进行平移和挤压,并使用平移和缩放值。你可能仍然想移动相机而不是物体,但是使用你自己的手势会给你更多的控制。