2017-10-01 3 views
1

좋아, 나는 재료 .dae 만 작성할 수 있습니다 또는 3D 모델은 모델의 편집기에서, 여기에 엑스 코드의 SCNNode로 사용되는 이해하는 것과 : 최상위 물질은 자동으로 모두 적용됩니다Scenekit : 노드의 모든 자료를 얻는 방법?

enter image description here

좋다. 내 문제는 게임 전반에 걸쳐 생성 된 이러한 자료를 프로그래밍 방식으로 전환하고 싶다는 것입니다.

나는 수행하여 이러한 자료의 배열을 얻기 위해 노력 :

node.geometry?.materials 

을하지만 이것은 단지 제 1 물질 것을 반환합니다. Ive는 everybting를 시도했다. 그러나 기울어진다 can not는 다른 물질을 얻고, 그들에게 바뀔 길을 발견한다. 지금 당장 노력하고 있습니다 :

childNode.geometry?.materials = [(childNode.geometry?.material(named: "test"))!] 
//childNode is the node 

여기서 test는 그 두 번째 물질 이었지만 nil이라고합니다. 프로그래밍 방식으로 여러 재질간에 전환하려면 어떻게해야합니까?

답변

1

재료가 재료 슬롯 중 하나 (예 : 확산)에 실제로 지정되지 않은 경우도 재료의 일부가 아닙니다.

두 번째 머티리얼을 다른 슬롯에 할당하고 나중에 사용할 속성으로 머티리얼을 읽은 후 코드에서 색상을 재설정 할 수 있습니다.

제가 사용했던 또 다른 옵션은 동일한 모델의 다른면에 여러 재질을 지정하는 것입니다 (타사 3D 소프트웨어에서). dae로 내 보낸 xcode에 추가되어 지오메트리가 각각의 고유 한 재료로 개별 요소로 자동 분할되었습니다. 그러면 xcode에서 조정할 수 있으며 수행하려고하는 것과 동일한 방식으로 반복 할 수 있습니다.

+0

감사합니다. 첫 번째 옵션을 더 자세히 설명하는 방법을 설명 할 수 있습니까? 다른 슬롯에서 무엇을 의미합니까? – skyguy

+0

나는 Emission 속성과 같이 두 번째 텍스처/색상을 넣을 수있는 방법을 제시했다. 그런 다음 코드에서 Emission 속성의 .contents 속성을 읽고 사용자 지정 속성에 저장 한 다음 해당 항목을 Diffuse 슬롯에 할당 할 수 있습니다. Emission 슬롯을 읽은 후에 Emission을 다시 검은 색으로 재설정하는 것을 잊지 마십시오. – Xartec

관련 문제