Swift 3 - SceneKit 获取 3d 模型比例值
Posted
技术标签:
【中文标题】Swift 3 - SceneKit 获取 3d 模型比例值【英文标题】:Swift 3 - SceneKit Get 3d model scale value 【发布时间】:2017-11-19 08:51:16 【问题描述】:我正在尝试获取加载到sceneView
中的 3d 对象的值,同时使用两根手指对其进行缩放。我可以正确获取rotation
、position
和orientation
,但是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】:使用sceneView.allowsCameraControl = true
时,您是在操作相机,而不是对象。您的 3D 对象没有移动,相机正在围绕它移动。
因此检查相机的比例是错误的,因为比例没有改变,只是放大了。
尝试检查sceneView.pointOfView?.camera.xFov
和sceneView.pointOfView?.camera.yFov
。
另外值得注意的是,allowsCameraControl
状态的文档:
请注意,此属性的主要目的是帮助调试 你的申请。您可能想要实现自己的相机控制器 适合您的应用。
【讨论】:
谢谢。我了解您指出正在移动的实际上是相机视图。使用 xFov 我可以看到相机变焦。那么我应该如何控制物体而不是相机的旋转和缩放?您可以指出我的任何堆栈或教程吗? 将您自己的手势识别器添加到场景中以进行平移和捏合,并使用平移和缩放值。您可能仍想移动相机而不是对象,但使用您自己的手势会给您更多的控制权。以上是关于Swift 3 - SceneKit 获取 3d 模型比例值的主要内容,如果未能解决你的问题,请参考以下文章
在 SceneKit/modelIO 中测量 3D-Obj 文件上两点之间的距离并显示它们