2017-09-19 10 views
2

overlaySKScene과 비슷한 것을 사용하여 특수 효과를 만드는 중입니다 (https://sketchfab.com/models/1144d7be20434e8387a2f0e311eca9b1#). 오버레이를 만들려면 https://github.com/halmueller/ImmersiveInterfaces/tree/master/Tracking%20Overlay을 따라갔습니다.장면 키트를 사용하여 3D 객체에 대한 주석을 동적으로 만드는 방법 - iOS 11의 ARKit?

제공된 예제에서는 단 하나의 주석 만 만들고 정적입니다. 우리가 가지고있는 자식 노드의 수를 기반으로 동적으로 여러 개의 주석을 만들고 싶습니다. 그리고 각각의 자식 노드 위에 주석을 배치 할 수 있어야합니다. 이것을 달성하는 방법? 나는 다음과 같은 오버레이를 추가하고

, InformationOverlayScene 내가 하나의 주석을 만드는 두 childnodes을 추가하는 SKScene입니다

sceneView.overlaySKScene = InformationOverlayScene(size: sceneView.frame.size) 

.

+0

cool project .. 좀 도와 줄 수는 있지만 scenekit/arkit은 아직 모른다. – Fluidity

답변

1

childNodes에 배열에 매핑되는 주석 스프라이트와 배열을 만든 다음 다음과 같은 일을 할 inBattleChars의 각 SCNNode에 대해 핵심 부분은 3D 장면의 SCNNode를 기반으로 SK 오버레이 장면의 2D 위치를 가져 오는 데 projectPoint가 사용되는 부분입니다.

보이지 않는 노드 (예 : 부모 개체의 뒷면에있는 자식 노드)의 주석이 나타나지 않게하려면 SCNRenderer의 nodesInsideFrustum (of :) 메서드를 사용하십시오.

+0

@ Xartec 나는 똑같은 일을했다. 이제 오버레이를 볼 수 있지만 두 가지 위치에서 볼 수 있습니다. 카메라 세션을 열면 3D 객체가있는 오버레이가 올바르게 표시되지만 카메라를 180 도로 움직이면 다른 위치에서 동일한 오버레이를 다시 볼 수 있습니다. 그것은 2 개 장소에서만 볼 수 있으며 다른 곳에서는 볼 수 없습니다. 어떻게 이런 일이 일어날 수 있겠습니까? – yaali

+0

이것은 효과가 있습니다. 그러나 updateAtTime 메서드에서 오버레이의 위치가 변경되므로 오버레이가 항상 불안정 해 보이고 안정적이지 않습니다. 주목할만한 카메라 움직임이나 3D 모델 움직임에서만 오버레이 자식 객체의 위치를 ​​업데이트 할 수있는 방법이 있습니까? – yaali

1

SKScene 또는 CALayermaterial property으로 추가 할 수 있습니다.

특정 너비와 높이로 SCNPlane을 만들고 SpriteKit 장면을 재질로 추가 할 수 있습니다. 예 : here을 찾을 수 있습니다.

그런 다음 평면을 원하는 위치에 배치하고 필요에 따라 주석을 만들고 삭제하십시오. 모든 프레임 (healthBars에서)이이 SKSprite의 위치를 ​​갱신 렌더링되기 전에

func renderer(_ aRenderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { 

    let scnView = self.view as! SCNView 
    //for each character 
    for var i in 0...inBattleChars.count-1 { 
     let healthbarpos = scnView.projectPoint(inBattleChars[i].position) 

     battleSKO.healthbars[i].position = CGPoint(x: CGFloat(healthbarpos.x), y: (scnView.bounds.size.height-10)-CGFloat(healthbarpos.y)) 
    } 
} 

:

+0

많은 자식 노드에 대해 이러한 종류의 텍스트 박스를 동적으로 추가하고 싶다. 또한 나는 이것이 주석처럼 행동하기를 원한다. 크기를 조정하거나 3D 객체에서 멀리 떨어지더라도 주석은 여전히 ​​같은 크기 여야합니다. https://sketchfab.com/models/1144d7be20434e8387a2f0e311eca9b1#를 참조하십시오. 이 방법을 사용하면이 같은 것을 얻을 수 있습니까? – yaali

+0

아니요 이렇게하면 공간에서 고정 된 위치와 그에 따라 크기가 조정 된 주석을 만듭니다. – orangenkopf