按钮旋转 3D 对象 ARKit 2

Posted

技术标签:

【中文标题】按钮旋转 3D 对象 ARKit 2【英文标题】:Button Rotation 3D Objects ARKit 2 【发布时间】:2019-01-02 23:36:06 【问题描述】:

我有由图像检测触发的 3D 对象。我添加了按钮,以便用户可以在不同的视图中查看对象,例如左、右、上、下等。我的代码有一个缺陷,因为旋转点是从最后一次触摸设置的。例如,如果你按右,它会变成 .pi/2,然后当你按左时它会变成 -.pi/2,将它重置回前视图而不是左视图。我如何能够设置一个原始的前原点,以便在每次按下后旋转“重置”并进入相应的视图?谢谢。

@IBAction func leftSideRotate(_ sender: UIButton) 
    let rotate = SCNAction.rotateBy(x: 0, y: -.pi/2, z: 0, duration: 0.5)
    sender.isEnabled = false
    toggleButton = sender
    activeNode?.runAction(rotate,completionHandler: enableButtonn)

func enableButtonn ()
    toggleButton?.isEnabled = true


@IBAction func upSole(_ sender: UIButton) 
    let rotate = SCNAction.rotateBy(x: -.pi/2, y: 0, z: 0, duration: 0.5)
    sender.isEnabled = false
    toggleButton = sender
    activeNode?.runAction(rotate,completionHandler: enableButtonnn)

func enableButtonnn ()
    toggleButton?.isEnabled = true

【问题讨论】:

【参考方案1】:

解决此问题的一种方法是在加载后立即保存场景中对象的原始坐标。然后,使用rotateTo 方法(而不是rotateBy)来实现所需的旋转。

例子:

let originalPosition = activeNode?.position

let rotate = SCNAction.rotateTo(x: originalPosition.x, y: (originalPosition.y - .pi/2), z: originalPosition.z, duration: 0.5)

【讨论】:

我在“let zPosition = activeNode?.zPosition”这一行遇到如下错误:“SCNNode”类型的值没有成员“zPosition”;你的意思是“位置”吗? 请查看我更新的答案,如果您仍有任何问题,请告诉我。

以上是关于按钮旋转 3D 对象 ARKit 2的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ARkIt2 中将图像包裹在 3d 对象上?

iOS-ARKit扫描和检测3D对象-Scanning and Detecting 3D Objects

iOS-ARKit扫描和检测3D对象-Scanning and Detecting 3D Objects

是否可以像在 Vuforia 中一样在 ARKit 中跟踪对象?

unity 3d实例:创建游戏对象旋转的立方体Unity3D Button图片按钮Box控件Label控件Background ColorColor

ios - ARKit 3D模型素材