2017-10-16 6 views
4

Ich arbeite an einer iOS-App, ich muss einen Marker erkennen (am wahrscheinlichsten wird es QR-Code sein) und etwas 3D-Inhalt über ARKit platzieren.ARKit und Vuforia - Marker-Erkennung

Ich dachte über eine Kombination von Vuforia und ARKit nach.

Ist es möglich, Vuforia nur zu verwenden, um den Marker zu erkennen und seine Position zu ermitteln, und diese Daten dann an ARKit "weiterzugeben"?

  • Ich muss den Marker erkennen, um entsprechenden 3D-Inhalt auszuwählen.
  • Ich brauche nur die Position des Markers, um 3D-Inhalte dort zu platzieren, danach möchte ich ARKit für das Tracking verwenden.

Ist es möglich?
Gibt es eine andere Lösung zur Markererkennung, die mit ARKit verwendet werden kann?

Antwort

2

Q1: Sie können die Erkennung des Markers Griff (Bild Ziel in Vuforia genannt) ein Skript erstellen:

public class CustomTrackableEventHandler : MonoBehaviour, 
              ITrackableEventHandler 
{ 
    ... 

    public void OnTrackableStateChanged(
            TrackableBehaviour.Status previousStatus, 
            TrackableBehaviour.Status newStatus) 
    { 
     if (newStatus == TrackableBehaviour.Status.DETECTED || 
      newStatus == TrackableBehaviour.Status.TRACKED || 
      newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) 
     { 
      OnTrackingFound(); 
      // **** Your own logic here **** 
     } 
     else 
     { 
      OnTrackingLost(); 
     } 
    } 
} 

Dann können Sie die DefaultTrackableEventHandler mit diesem diesem Skript ersetzen.

enter image description here

Q2: Ich brauche die Position des Markers nur diejenigen zu bekommen, um dort 3D-Inhalte zu platzieren, danach habe ich für das Tracking verwenden Arkit will.

Sie können ein leeres Spiel-Objekt hinzufügen, das Kind des Markers (ImageTarget) zu sein, und die Hierarchie wäre:

YourMarker(ImageTarget) 
    |__EmptyPlaceHolder 

Wenn der Marker erkannt wird, können Sie dann programmatisch seinen Standort:

var placeHolder = GameObject.Find("EmptyPlaceHolder"); 
if(placeHolder != null){ 
    Debug.Log(placeHolder.transform.position); // all the location, localPosition, quaternion etc will be available to you 

} 
+0

Woher kommt die obige UI? Ich sehe im Target Manager oder in Xcode nichts Vergleichbares. –

+0

Ziehen Sie ein vorgefertigtes Bildziel in die Szene, Sie sehen es dann. – David

+0

Vielen Dank !!! Es scheint eine perfekte Lösung zu sein, aber aus irgendeinem Grund funktioniert es nicht für mich. Hier ist ein kurzer Beispielcode, den ich erstellt habe. Wenn ich also eine Markierung erkenne, möchte ich eine einfache Benutzeroberfläche mit einer Schaltfläche anzeigen. http://csharppad.com/gist/82e2573f674f1d42b413d3fb8b0b9b60 Ich habe den DefaultTrackableEventHandler deaktiviert und hinzugefügt Debug.Log() zum Testen, aber ich sehe keine Nachrichten in meiner Konsole (so erreicht OnTrackingFound() nie), aber ich sehe immer noch Objekte, die dem Prefab-Image hinzugefügt wurden, werden angezeigt, wenn der Marker erkannt wird! Es ist seltsam, dass ich irgendwo einen Fehler gemacht habe? Ich verwende Unity 2017.2.0f3 – Rumata