我可以复制SCNNode并保持比例

时间:2016-07-19 17:50:13

标签: swift scenekit scnnode

我想多次复制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)
}

2 个答案:

答案 0 :(得分:0)

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

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

现在,由于节点和几何体被多次创建,它们都是不同的,无法调整大小或缩放

所以我做了什么:

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

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

答案 1 :(得分:0)

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

Tcl_SetObjResult(interp, listPtr);