我试图通过一些图像覆盖检测到的平面
所以我试着用renderer(_:nodeFor:)
在这个方法里面,一些博主写了这样的代码
guard let anchor = anchor as? ARPlaneAnchor else { return nil }
let anchorNode = SCNNode()
let planeNode = SCNNode()
let material = SCNMaterial()
material.diffuse.contents = UIColor.gray.withAlphaComponent(0.6)
let plane = SCNPlane(width: CGFloat(anchor.extent.x), height: CGFloat(anchor.extent.z))
plane.materials = [material]
planeNode.geometry = plane
planeNode.position = SCNVector3(anchor.center.x, 0, anchor.center.z)
planeNode.eulerAngles = SCNVector3(-Float.pi / 2, 0, 0)
anchorNode.addChildNode(planeNode)
return anchorNode
为什么他们将子节点添加到空节点?
为什么不旋转自己
当然,我阅读了有关它的文档
他们说 :
您可以实现此方法以提供新的 SCNNode 对象(或 SCNNode 子类的实例),其中包含您计划用作锚点的可视表示形式的任何附件。请注意,ARKit 控制节点的可见性及其转换属性,因此您可能会发现添加子节点或调整节点的 pivot 属性以保持对您所做的位置或方向的任何更改都很有用。
场景背后的逻辑是什么?
那么如何使用 pivot 旋转节点本身?
1 回答
当调用
renderer(_:nodeFor:)
时,它要求节点附加到锚点,如果锚点在世界空间中的位置更新,它也会自动更新节点。您需要做的就是返回要放在检测到的曲面上的平面节点。例如在
renderer(_:nodeFor:)
中你可以这样做