Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在“中”旋转SCNNode;func渲染器(SCNScenerEnder,节点用于:ARAnchor)——>;SCNNode?“;_Ios_Swift_Xcode_Scenekit - Fatal编程技术网

Ios 如何在“中”旋转SCNNode;func渲染器(SCNScenerEnder,节点用于:ARAnchor)——>;SCNNode?“;

Ios 如何在“中”旋转SCNNode;func渲染器(SCNScenerEnder,节点用于:ARAnchor)——>;SCNNode?“;,ios,swift,xcode,scenekit,Ios,Swift,Xcode,Scenekit,因此,我能够在锚定位置放置一个长方体节点。 现在,如何在场景中旋转SCNNode 我试图修改节点的变换和eulerangle,但它们没有效果: func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? { print("nodeFor anchor \(anchor)") guard anchor.name == "card" else { return nil }

因此,我能够在锚定位置放置一个长方体节点。 现在,如何在场景中旋转SCNNode

我试图修改节点的变换和eulerangle,但它们没有效果:

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渲染器中进行旋转(渲染器:SCNSceneRenderer,didAdd节点:SCNNode,用于锚点:ARAnchor)

但这也没什么帮助

我用下面的代码成功地制作了旋转动画

    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")
基于这一成功,我也尝试过(但失败了)


有人知道如何在ARSCNViewDelegate的委托方法中旋转节点吗?

ARSession
将定位和定向您提供给它的节点。最好在子节点上执行旋转,使其旋转到已出售的节点。所以在
func渲染器中(u渲染器:SCNSceneRenderer,锚点的节点: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
    node.rotation = SCNVector4(x: 5, y: 4, z: 3, w: 0)
let node = SCNNode(geometry: boxGeometry)
node.eulerAngles = SCNVector3(x: -Float.pi / 2, y: 0, z: 0)

let rootNode = SCNNode()
rootNode.addChildNode(node)
return rootNode