0

我想多次复制一个 SCNNode,每个节点有不同的材料和不同的位置。但是保持相同的比例。所以,如果我改变我复制的节点的比例,所有复制的节点都应该改变。

在下面的代码中,当我运行 changeScale() 时,复制的节点比例不会改变。

有没有办法可以一起更改所有复制节点的比例或几何尺寸。无需单独枚举或更改它们

let mainNode = SCNNode()
let mainGeo = SCNPlane(width: CGFloat(4), height: CGFloat(4))
mainNode.geometry = mainGeo

for var i = 1; i <= 10; i += 1 {
    let thisNode = mainNode.copy() as! SCNNode
    thisNode.position = SCNVector3Make( Float(rx), Float(ry), Float(rz) )

    thisNode.geometry = thisNode.geometry!.copy() as? SCNGeometry
    thisNode.geometry?.firstMaterial = thisNode.geometry?.firstMaterial!.copy() as? SCNMaterial

    if i == 0 {
        thisNode.geometry?.firstMaterial?.diffuse.contents = UIColor.blueColor()
    } else {
        thisNode.geometry?.firstMaterial?.diffuse.contents = UIColor.redColor()
    }
    scene.rootNode.addChildNode(thisNode)

}

func changeScale() {
    mainNode.scale = SCNVector3Make(7, 7, 7)
}
4

2 回答 2

0

我不确定这是否是正确的答案。因为我不是 Swift 或 ios 方面的专家。似乎当一个节点被复制或克隆时,除了几何等的分配信息之外,该节点不携带任何属性。我最初认为某些属性可以对所有复制的节点保持相同,例如比例或位置。

我想要的是在创建时为每个节点提供不同的位置和材料,所有节点的比例或几何尺寸的变化。

现在,由于节点和几何图形被多次创建,它们都是不同的,不能一起调整大小或缩放

所以我做了什么:

  • 多次复制主节点,给它不同的位置
  • 创建一个主几何体(外部),将其设置为具有
    特定大小的主节点。所以所有的主要节点都使用这个几何
  • 在主节点上添加了一个子节点,具有不同的材质属性
  • 给子节点增加了一个SCNTransformConstraint,根据主材质的大小进行变换

所以现在每当我编辑几何大小时,子节点大小都会一起改变。我不确定这种方法的速度/性能如何。但这似乎比枚举每个节点要好

于 2016-07-21T10:20:55.947 回答
0

您可以尝试使用克隆而不是复制:

let thisNode = mainNode.clone() as! SCNNode
于 2021-04-23T14:12:22.917 回答