我的目标是在另一个包含 SCNPlane 的 SCNNode 中间生成一个 SCNNode。
SCNPlane 在渲染器函数中生成,如下所示:
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
let width = CGFloat(planeAnchor.extent.x)
let height = CGFloat(planeAnchor.extent.z)
let plane = SCNPlane(width: width, height: height)
plane.materials.first?.diffuse.contents = UIColor.orange
let planeNode = SCNNode(geometry: plane)
let x = CGFloat(planeAnchor.center.x)
let y = CGFloat(planeAnchor.center.y)
let z = CGFloat(planeAnchor.center.z)
planeNode.position = SCNVector3(x,y,z)
planeNode.eulerAngles.x = -.pi / 2
node.addChildNode(planeNode)
node.name = "plane"
loadSphere(x:x, y:y, z:z)
我试图将球体放在平面的中间:
func loadSphere (x:CGFloat, y:CGFloat, z:CGFloat) {
let idleScene = SCNScene(named: "art.scnassets/bounceFixed.dae")!
// This node will be parent of all the animation models
let node = SCNNode()
for child in idleScene.rootNode.childNodes {
node.addChildNode(child)
}
// Set up some properties
node.name = "Sphere"
node.position = SCNVector3(x, y, z)
node.scale = SCNVector3(0.001, 0.001, 0.001)
...
但问题是,每当我运行它时,x、y、z 最终都为零。我已经尝试过类似sceneView.scene.rootNode.childNodes[3].worldPosition
或node.worldPosition
但总是在相机视图中而不是在平面中间生成球体。
我在这里附上了一张图片,向您展示我所说的“中间”是什么意思。
请让我知道如何解决这个问题。
编辑:我在这篇文章中的目标是尝试获取平面节点的 x、y、z(中心)而不将球体附加为子节点。
最好的。