2017-12-22 8 views
1

Momentan lädt sich mein Code in einem 3D-Modell, erstellt einen Knoten mit diesem Modell und zeigt den Knoten in der Szene an. Das Einstellen der Skalierung/Drehung (Euler-Winkel) des Knotens funktioniert gut. Ich versuche jedoch, die Position des Knotens relativ zum Weltursprung festzulegen, und ich möchte nicht, dass der Knoten an eine Ebene angehängt wird.ARKit - Positionieren eines Knotens in der Welt relativ zum Weltursprung

Ich habe versucht Einstellung node.position und node.worldPosition ohne Erfolg; Obwohl sich die Position des Knotens ändert, bleibt der Knoten beim Bewegen der Kamera nicht statisch, sondern bewegt sich mit der Kamera. Ich bin neu in der Verwendung von ARKit, also mache ich wahrscheinlich etwas Dummes, aber ich kann nicht herausfinden, was ich tun muss, also würde jede Hilfe sehr geschätzt werden.

Bearbeiten: Die seltsame Sache ist, dass, wenn ich die Koordinaten zu SCNVector3 (0, 3, 0) sagen, ist es in Ordnung, aber wenn ich über eine bestimmte Anzahl von Metern weg gehen scheint es zu scheitern. Ist dies erwartet

Antwort

0

Erstens kann schlechte Welt Tracking von diesen häufigen Problemen verursacht werden.

  1. Schlechtes ligthing. Verursacht geringe Anzahl von Features verfügbar Punkte für

  2. Mangel an Textur-Tracking für die Verfolgung geringe Anzahl von Merkmalspunkten verfügbar Ursachen

  3. schnelle Bewegung unscharfe Bilder verursacht, die

scheitern verursacht Tracking

Allerdings, was ich glaube, passiert in Ihrem Fall (die ein wenig schwieriger zu debuggen ist) ... ist es wahrscheinlich, dass Sie das geladene Modell unterhalb der Erkennung platzieren horizontale Ebene in der Szene.

Mit anderen Worten, wird möglicherweise die SCNNode positioniert haben eine negative Y-Koordinate unter Verwendung der der Knoten unter der Horizontalen detektiert Ebene platziert und bewirkt, dass sich das Modell um driften, während Sie den cameraView ändern

versuchen, die Y-Position des Einstellens der Knoten entweder auf 0 oder einen kleinen positiven Wert wie 0,1 Meter

node.position = SCNVector3(0, 0, -1) // SceneKit/AR coordinates are in meters 

sceneView.scene.rootNode.addChildNode(node) 

z = -1 platziert den SCNNode 1 Meter vor dem cameraView.

Hinweis: Ich habe dieses Problem mit einem Spielplatz, den ich für Testzwecke verwende, selbst verifiziert.

+0

Danke für die Antwort. Leider glaube ich nicht, dass es Problem 1, 2 oder 3 ist, da ich den ARTrackingState überprüfe und es sagt, dass es normal ist, und ich setze niemals Knoten mit einer negativen Y-Koordinate. Die komische Sache ist, dass, wenn ich die Koordinaten zu SCNVector3 (0, 3, 0) sagen, es ist in Ordnung, aber wenn ich über eine bestimmte Anzahl von Metern weg gehen scheint es zu scheitern. Wird das erwartet? Oh, und Frohe Weihnachten, wenn Sie es feiern! – Henry

+0

Hallo Henry, frohe Weihnachten ... Ich bin in Sydney Australien, also hatten wir es jatereday! .Ich habe das Tracking im Allgemeinen als sehr gut empfunden. Ich habe eine Helikopter-Simulator-App gebaut, die es mir ermöglicht, den Helikopter 2 km weit in die Ferne und 1 km hoch zu fliegen, bis der Knoten nur noch 1 Pixel groß ist und schließlich vom Bildschirm verschwindet. Bei all diesen Tests habe ich festgestellt, dass das Tracking wirklich beeindruckend ist. – Ash

+0

Der Knoten (Helikopter) verschwindet sogar vom Bildschirm (kleiner als 1 Pixel) und erscheint wieder, wenn Sie sich zurück bewegen, so dass der Knoten größer als 1 Pixel ist. – Ash

Verwandte Themen