2016-07-19 3 views
0

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) 
} 

답변

0

그들을 변경하지 않고 나는 이것이 정답인지 아닌지 확실하지 않다. 나는 스위프트 또는 아이오스의 전문가가 아니기 때문에. 노드가 복사되거나 복제 될 때처럼 노드는 지오메트리 등에 할당 된 정보와 별개로 속성을 갖고 있지 않습니다. 처음에는 일부 속성이 배율 또는 위치와 같이 모든 복사 된 노드에서 동일하게 유지 될 수 있다고 생각했습니다.

필자가 원했던 것은 생성시 모든 노드에 대해 서로 다른 위치와 재료를 사용하고 모든 노드 또는 구조 크기의 크기를 함께 변경할 수 있다는 것이 었습니다. 노드와 기하학의 여러 번 만들어지면 이제

는, 그들은 모두 다르고 크기 또는 함께 내가 한 그래서

확장 할 수 없습니다

  • 메인 노드를 여러 번 복사를 준 다른 위치
  • 하나의 기본 지오메트리 (외부)가 만들어지고
    특정 크기의 주 노드로 설정합니다. 그래서 모든 주요 노드가 다른 재료 특성
  • 추가 하위 노드에 SCNTransformConstraint와
  • 메인 노드에 하위 노드를 추가,이 형상을 사용, 주요 재료의 크기에 에 따라 변환하는

이제 지오메트리 크기를 편집 할 때마다 하위 노드 크기가 모두 변경됩니다. 이 방법이 속도/성능과 어떤 관련이 있는지 잘 모르겠습니다. 하지만 모든 노드를 통해 열거하는 것보다 낫다.

관련 문제