Anfügepunkte
In erster Linie bietet World Locking Tools ein stabiles weltgebundenes Koordinatensystem: den weltgebundenen Raum. Dieser Raum bleibt so fest mit der physischen Welt verankert wie möglich. Und Objekte im weltgebundenen Raum können Funktionen nutzen, die einen solchen stabilen Bezugsrahmen erfordern, wie z. B. die Beibehaltung der Platzierung relativ zu anderen virtuellen Objekten, die Simulation von physikalischen Gesetzen, Kinematik und andere Animationstechniken.
Je nach Anforderungen der Anwendung kann der weltgebundene Raum für einige oder alle Szeneninhalte ausreichend sein.
Aber wenngleich der weltgebundene Raum optimal an den physischen Raum angepasst bleibt, gibt es Situationen (diese werden später beschrieben), in denen es nicht möglich ist, dass mehrere Punkte im weltgebundenen Raum sowohl in ihrem gemeinsamen Koordinatenraum als auch relativ zu Referenzpunkten in der physischen Welt fixiert bleiben.
Betrachten wir ein triviales, aber anschauliches Beispiel: Nehmen wir an, der Sensor ordnet einen Anker der Position (3,0,0) und einen anderen der Position (-3,0,0) zu. Beim späteren Verarbeiten von Feineinstellungen für den Sensor wird ermittelt, dass die beiden Koordinaten (3,0,0) und (-2,0,0) hätten lauten müssen. Es gibt eindeutig keine Rotation und keine Verschiebung, die auf die Kamera angewendet werden kann, um einen Abstand von sechs Metern zwischen den beiden Ankern in einen Abstand von fünf Metern umzuwandeln.
Bei Verwendung des Raumankersystems von Unity würden sich die beiden Anker einfach stillschweigend an ihre neu gescannten Positionen bewegen.
World Locking Tools hingegen garantiert, dass sich bewegungslose Objekte im weltgebundenen Raum (in der Regel) nicht bewegen. Und in der Tat liegt jedwede Bewegung im Ermessen der besitzenden Anwendung.
Eine weitere „anormale“ Bedingung, die häufig auftritt, ist der Tracking-Verlust. Wenn die Positionsbestimmung in einer Umgebung (z. B. in einem Raum) unterbrochen und in einer anderen Umgebung fortgesetzt wird, gibt es zunächst keine Informationen, die die beiden Räume miteinander verbinden. Die Koordinaten in einem Raum sind in Bezug auf die Koordinaten im anderen Raum bedeutungslos. Das Paradigma der Anfügepunkte ermöglicht es der Anwendung, die Anfangsphase – in der keine räumlichen Informationen über den alten Raum bekannt sind – elegant zu überbrücken (z. B. durch Ausblenden der Objekte im alten Raum), und die räumlichen Beziehungen zwischen den beiden Räumen wiederherzustellen, wenn diese bekannt werden.
Diese besonderen Bedingungen und die Neuanpassungsvorgänge, die WLT zu ihrer Bewältigung durchführt, werden im Folgenden näher erläutert. Die vorliegende Erläuterung konzentriert sich auf den Vertrag zwischen WLT und der Anwendung zur reibungslosen Behebung solcher Bedingungen.
Anfügepunkte sind die Kodifizierung dieses Vertrags zwischen World Locking Tools und der Anwendung. Eine Anwendung erstellt und positioniert Anfügepunkte mithilfe der World Locking Tools-APIs. Wird eine Positionskorrektur eines Anfügepunkts durch einen Neuanpassungsvorgang festgestellt, wird der Anwendung über einen Rückruf die neue Position im weltgebundenen Raum mitgeteilt, wodurch der Anfügepunkt im physischen Raum an seiner bisherigen Position verbleibt.
Nachfolgend werden einige Szenarien aufgeführt, in denen World Locking Tools-Anfügepunkte die Lösung sein können:
- Eine Fixierung relativ zu Merkmalen in der physischen Welt ist wichtiger als eine Fixierung relativ zu anderen virtuellen Objekten.
- Objekte werden zur Laufzeit in der Welt platziert und nicht zur Entwurfszeit in Unity. Daher kann es wichtig sein, relative Positionen wieder in Einklang zu bringen, die durch Tracking-Verluste unterbrochen wurden (siehe Erläuterung zu Fragmenten).
- Es ist wichtig, die Sichtbarkeit eines Objekts auf der Grundlage der Gültigkeit seiner Positionierung im physischen Raum zu verwalten.
Verwenden von Anfügepunkten
Die Verwendung von Anlagepunkten ist relativ unkompliziert.
Verantwortlichkeiten des Clients
Für jeden erforderlichen Anfügepunkt muss der Client folgende Aufgaben ausführen:
- Anfordern von Anfügepunkt beim System, siehe CreateAttachmentPoint.
- Freigeben von nicht mehr benötigten Anfügepunkten, siehe ReleaseAttachmentPoint.
- Informieren des Systems über die Ausgangsposition und die Bewegung des Anfügepunkts, siehe CreateAttachmentPoint, MoveAttachmentPoint und TeleportAttachmentPoint.
- Verarbeiten von Neuanpassungsereignissen. Siehe unten.
Verantwortlichkeiten von World Locking Tools
World Locking Tools benachrichtigt die Anwendung, wenn für einen Anfügepunkt eines der folgenden Ereignisse eintritt:
- Die Gültigkeit der Tracking-Daten des Anfügepunkts in der physischen Welt hat sich geändert.
- Seine Koordinaten im weltgebundenen Raum ändern sich aufgrund eines Neuanpassungsvorgangs, bei dem es sich entweder um eine Fragmentzusammenführung oder um eine erneute Fixierung handeln kann.
Diese Benachrichtigungen werden über Delegaten übertragen, die die Anwendung dem WorldLockingManager bei Erstellung des Anfügepunkts übergibt.
Wie diese Benachrichtigungen am besten zu handhaben sind, ist Sache der Anwendung, da jede Anwendung eigene Anforderungen hat. Es werden Beispielhandler bereitgestellt, die intern verwendet werden und entweder in unveränderter Form oder als Ausgangspunkt für benutzerdefinierte Implementierungen genutzt werden können.
Beispielimplementierungen
Für einen Anfügepunkt, der in der physischen Welt fixiert bleiben und der zugehörige Inhalte ausblenden soll, wenn seine Verfolgung ungültig ist, implementiert AdjusterFixed den AdjustStateDelegate mit dem zugehörigen HandleAdjustState-Member und AdjustLocationDelegate mit dem zugehörigen HandleAdjustLocation-Member. Eine ähnliche Komponente zum Verschieben von Objekten ist in AdjusterMoving enthalten.
Es ist erwähnenswert, dass die Angabe eines oder beider dieser Delegaten optional ist, und dass Reaktionen auf Zustands- und Positionsänderungen auf der Grundlage von Abfragen anstelle von Ereignissen implementiert werden können. Aber sofern ihre Verwendung nicht aufgrund von Besonderheiten der Anwendung ausgeschlossen ist, stellt das ereignisbasierte System unter Verwendung von Delegaten eine wesentlich effizientere Implementierung dar.
Es wird empfohlen, mit der AdjusterFixed-Komponente (oder der sehr ähnlichen AdjusterMoving-Komponente) zu beginnen und die Handler HandleAdjustLocation und HandleAdjustState an die Anforderungen Ihrer Anwendung anzupassen.