2017-09-19 12 views
0

저는 AR 기반 응용 프로그램을 만들고 있습니다. 예를 들어 https://docs-assets.developer.apple.com/published/c5ad3d23f4/Handling3DInteractionandUIControlsinAugmentedReality.zip을 사용하고 있습니다. 3D 객체의 각 자식 노드 위에 텍스트 설명이있는 오버레이를 구현하려고합니다.iOS 11에서 Scenekit-ARKit을 사용하여 하위 노드 위치를 얻는 방법은 무엇입니까?

나는 각 자식 노드의 위치를 ​​얻으려고했다. 예를 들어 Apple의 샘플에서 chair 객체를 가져온다면 Xcode 장면 편집기를 살펴보면 모든 자식 노드가 같은 위치에 배치됩니다. 이 경우 자식 노드의 중심 위치를 얻는 방법은 무엇입니까? 예를 들어 내가 약을 가져야 만한다면. 의자 다리 위치, 어떻게 할 수 있니?

답변

1

노드의 위치는 항상 최소한 장면의 rootNode에서 다른 노드를 기준으로합니다. 루트 노드 (즉, 월드 공간에서의 위치)에 대한 childnode의 위치를 ​​얻으려면 convertPosition을 사용하여 rootNode를 사용할 수 있습니다. 부모에 상대적인 childnode의 위치를 ​​얻으려면 위치를 부모 노드의 공간으로 변환 할 수 있습니다. https://developer.apple.com/documentation/scenekit/scnscenerenderer/1524089-projectpoint

의자 다리의 선회가의 중심에 위치하지 않을 경우 당신이 얻을 후

https://developer.apple.com/documentation/scenekit/scnnode/1407990-convertposition

세계 공간은 2D 화면에 3 차원 위치 좌표를 변환하는 projectPoint를 사용할 수있는 좌표 다리, 그 위치도 그 중심에 있지 않을 것이다. 이 경우 중심을 얻으려면 노드 경계 상자의 최소값과 최대 값의 평균값을 사용하거나 (SCNBoundingVolume 참조) 단순히 오버레이의 2D 위치에서 오프셋을 사용하십시오.

+0

예 월드 공간을 기준으로 위치를 변환했지만 여전히 모든 하위 노드 위치가 정확히 동일합니다. Xcode Scene Editor를 살펴보면 모든 자식 노드의 위치가 동일하다는 것을 알 수 있습니다. 이것이 언제 일어날까요? 내가 사용하고있는 모델의 버그입니까? 의자 모델에서도 모든 자식 노드 위치는 동일하게 유지됩니다. – yaali