SCNNode?"中旋转 SCNNode-6ren"> SCNNode?"中旋转 SCNNode-因此,我能够在 anchor 位置放置一个框节点。现在,如何旋转场景中的 SCNNode? 我正在尝试修改节点的变换和 eulerAngles,但它们没有任何效果: func renderer(_ r-6ren">
gpt4 book ai didi

ios - 如何在 "func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode?"中旋转 SCNNode

转载 作者:行者123 更新时间:2023-11-28 14:24:45 27 4
gpt4 key购买 nike

因此,我能够在 anchor 位置放置一个框节点。现在,如何旋转场景中的 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
}

我还尝试在 func renderer(_ renderer: SCNSceneRenderer, 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 的委托(delegate)方法中旋转我的节点吗?

最佳答案

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

关于ios - 如何在 "func renderer(SCNSceneRenderer, nodeFor: ARAnchor) -> SCNNode?"中旋转 SCNNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51704401/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com