How do I rotate a SCNNode in quot;func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -gt; SCNNode?quot;(如何在函数渲染器(SCNSceneRenisher,nodeFor:ARAnchor)中旋转SCNNode?gt;SCNNode?Quot;)
问题描述
因此,我能够在锚点位置放置一个长方体节点。 现在,如何在场景中旋转SCNNode?我正在尝试修改节点的转换&;eulerAngles,但它们没有效果:
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
print("nodeFor anchor (anchor)")
guard anchor.name == "card" else { return nil }
let colors = [
UIColor.yellow, // front
UIColor.red, // right
UIColor.blue, // back
UIColor.green, // left
UIColor.purple, // top
UIColor.gray] // bottom
let sideMaterials = colors.map { color -> SCNMaterial in
let material = SCNMaterial()
material.diffuse.contents = color
material.locksAmbientWithDiffuse = true
return material
}
let boxGeometry = SCNBox(width: 0.12, height: 0.01, length: 0.07, chamferRadius: 0)
boxGeometry.materials = sideMaterials
let node = SCNNode(geometry: boxGeometry)
node.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)
node.eulerAngles.x = .pi / 2
return node
}
我还试着在函数渲染器中进行旋转(_renender:SCNSceneRenender,didAdd node:SCNNode,For Anchor:ARAnchor)
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
node.eulerAngles.x = .pi / 2
}
但这也没有帮助。
我使用下面的代码成功地制作了旋转动画。
let spin = CABasicAnimation(keyPath: "rotation")
// Use from-to to explicitly make a full rotation around z
spin.fromValue = NSValue(scnVector4: SCNVector4(x: 0, y: 0, z: 1, w: 0))
spin.toValue = NSValue(scnVector4: SCNVector4(x: 0, y: 0, z: 1, w: Float(2 * Double.pi)))
spin.duration = 3
spin.repeatCount = 1
node.addAnimation(spin, forKey: "rotation")
基于那次成功,我也尝试了(但失败了)
node.rotation = SCNVector4(x: 5, y: 4, z: 3, w: 0)
有人知道如何在ARSCNViewDelegate的委托方法中旋转节点吗?
推荐答案
ARSession
将定位您提供给它的节点。最好是对子节点执行轮换操作,将其转换为已分配的子节点。因此在func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode?
在返回之前,您可以说:
let node = SCNNode(geometry: boxGeometry)
node.eulerAngles = SCNVector3(x: -Float.pi / 2, y: 0, z: 0)
let rootNode = SCNNode()
rootNode.addChildNode(node)
return rootNode
这篇关于如何在函数渲染器(SCNSceneRenisher,nodeFor:ARAnchor)中旋转SCNNode?>;SCNNode?&Quot;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在函数渲染器(SCNSceneRenisher,nodeFor:ARAnchor)中旋转SCNNode?>;SCNNode?&Quot;
- Android viewpager检测滑动超出范围 2022-01-01
- 用 Swift 实现 UITextFieldDelegate 2022-01-01
- 使用自定义动画时在 iOS9 上忽略 edgesForExtendedLayout 2022-01-01
- android 4中的android RadioButton问题 2022-01-01
- Android - 我如何找出用户有多少未读电子邮件? 2022-01-01
- Android - 拆分 Drawable 2022-01-01
- 在测试浓缩咖啡时,Android设备不会在屏幕上启动活动 2022-01-01
- 想使用ViewPager,无法识别android.support.*? 2022-01-01
- 如何检查发送到 Android 应用程序的 Firebase 消息的传递状态? 2022-01-01
- MalformedJsonException:在第1行第1列路径中使用JsonReader.setLenient(True)接受格式错误的JSON 2022-01-01