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,我可以看到相机变焦。那么,我应该如何控制对象的旋转和缩放,而不是相机?你能给我指出来的任何堆栈或教程吗?将你自己的手势识别器添加到场景中进行平移和挤压,并使用平移和缩放值。你可能仍然想移动相机而不是物体,但是使用你自己的手势会给你更多的控制。