2017-12-06 3 views
1

Ich bin neu in iPhone App Entwicklung (aber erfahrene Entwickler in anderen Sprachen) und ich mache eine ARKit-Anwendung, in der ich die Position eines Bildes verfolgen und ein Rechteck um dieses Bild anzeigen muss.Get ARFrame von ARKit Szene

Ich könnte es in C++ mit OpenCV machen und die entsprechenden "Bridging" -Klassen machen, um diesen Code von swift aufrufen zu können. Jetzt muss ich die Bilder von ARKit holen und sie an diese Funktion übergeben.

Wie kann ich eine Funktion aufnehmen, die die ARFrame aus der ARKit-Szene behandelt? Ich fand, dass ich ARFrame von sceneView.session.currentFrame bekommen konnte, aber ich fand nicht, wie man eine Funktion herstellt, die für jeden Rahmen (oder jedes Mal, wenn meine Funktion beendet wird und bereit ist, den nächsten Rahmen zu empfangen) aufgerufen würde.

Auch habe ich die Vision Framework entdeckt, aber es scheint nur in der Lage zu sein, ein Element zu verfolgen, auf das der Benutzer geklopft hat. Ist das richtig oder gibt es eine Kombination vordefinierter Funktionen, die zu diesem Zweck verwendet werden könnten?

+0

Werfen Sie einen Blick verfolgen [session (: didUpdate:)] (https: // developer.apple.com/documentation/arkit/arssessiondelegate/2865611-session) vom 'ARSessionDelegate'-Protokoll. Ich glaube, es erfüllt Ihre Anforderung von _suscribe eine Funktion, die die ARFrames aus der ARKit-Szene behandelt _ – leandrodemarco

+0

@leandrodemarco Das hat funktioniert, danke. Sie können es als Antwort für zukünftige Googler posten. –

Antwort

2

Sie können jeden aufgenommenen Rahmen mit der Kamera session(:didUpdate:) aus dem Protokoll ARSessionDelegate erhalten. Beachten Sie, dass diese Methode auch dann nützlich ist, wenn Sie den bereitgestellten ARFrame nicht verwenden. Ich benutze es zum Beispiel zum "Polling", wenn derzeit virtuelle Inhalte hinzugefügt werden.

In Bezug auf die Tracking-Bild Frage, ich glaube, Sie es auf das Bild, eine ARAnchor oder SCNNode und Position schaffen könnte und Arkit wäre es bei