Frage

Ich habe hier ein Denken und das suchendes Problem und kann nicht die gute Richtung finden, um ... Ich freue mich, einen Algorithmus zu entwickeln, um sich in einem 360-Bild (Kugel wie) unter Verwendung der Gerätebewegung bewegt.

Wenn der Benutzer das Gerät vor ihm zeigt, erhält er den ermittelten Ursprungspunkt des Bildes.Da er das Gerät um ihn herum bewegt, bewegt sich das Panoramabild entsprechend.

Jede Idee oder Quelle, in die ich schauen kann?

Danke und viel Glück für alle mit Swift :)

War es hilfreich?

Lösung

Ich sehe zwei einfache Wege, dies zu implementieren, ohne zu viel mathematischem Ärger:

    .
  1. Euler Winkel verwenden, dh das Rolleigenschaft der CMAthitude . Definieren Sie ein Mapping zwischen der Bildbreite und dem gemessenen Winkel und kümmern Sie sich um die Singularität bei 180 ° / -180 °. Nachteil dieses Ansatzes:
    • Mögliche Gefahr von Gimbal Lock , wenn Benutzer ihre Geräte auf chaotische Weise bewegen.
    • Dasselbe gilt für die Erweiterbarkeit in Bezug auf eine vollständige 3D-Ansicht.
  2. Verwenden Sie die Magnetfeld von CMDevicemotion , was robust gegen das Gimbal-Schloss ist. Das Magnetometer ist ein bisschen langsamer als Beschleunigungsmesser / Gyro, aber ich denke, der Fusionalgorithmus des Coremotion bietet eine angemessene Schätzung, damit dies nicht der Punkt ist. Nachteile hier:
    • Magnetfeld ist nicht immer verfügbar oder neigt dazu, schlampig ungenau.
    • Die Ausweitung auf 3D-Ansicht könnte ein Ärgern sein.
  3. Beide Ansätze sollten ziemlich einfach zu implementieren sein und damit ich mit einem von ihnen beginnen würde. Wenn Sie dann eine anspruchsvollere Lösung haben möchten, müssen Sie ein bisschen tiefer in die Mathematik tauchen. In diesem Fall kann eine ppossible Lösung sein, um das normale Gerät normal (s. B. Sehenswürdigkeit normaler Vektor zu IOS-Gerät ), projizieren Sie es auf die Earth-Suface-Ebene und nehmen Sie den Delta des Winkels für das zylindrische Panorama.

    Die Kugelprojektion ist in diesem Fall noch einfacher, da Sie den Nomalvektor direkt verwenden können.

Andere Tipps

Dank Kay könnte ich auf dem richtigen Weg sein, um diesen Effekt zu erreichen.

Ich mache diese Antwort, nur um mehr Details für diejenigen bereitzustellen, die das Gleiche suchen.

Zuerst müssen Sie ein CMMotionManager-Objekt erstellen.

Verwenden Sie dann startdevicemotionupdatestoquee, um Bewegungsereignisse zu handhaben.

generasacodicetagpre.

In der ProzessMotion müssen Sie nur die Haltung basierend auf dem vorherigen erhalten:

generasacodicetagpre.

Dank dieser, kennen Sie den neuen Winkel, der vom Benutzer seit dem letzten Update hergestellt wird. Wenn Sie Ihre Ansicht bewältigen, konvertieren Sie den neuen Eulerwinkel in die Menge der Pixel, die Sie benötigen, um Ihr Bild zu verschieben. Seien Sie einfach ein sorgfältiger Eulerwinkel variiert zwischen -180, 180 und sind in rad von Apfel gegeben.Das könnte praktisch sein:

generasacodicetagpre.

In meinem Fall berechne ich einfach den neuen X-Offset, weil ich nur auf der X-Achse bewegt.

hoffe das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top