EasyAR-Koordinatensysteme
In 3D-Programmen ist die Definition von Koordinatensystemen sehr wichtig. Sofern nicht anders angegeben, gelten die folgenden Konventionen.
Vektoren sind Spaltenvektoren.
Matrizen verwenden row-major. (OpenGL verwendet column-major)
Koordinatensysteme sind rechtshändige Koordinatensysteme. (Konsistent mit OpenGL)
Wenn ein Koordinatensystem einen physischen Maßstab hat, ist die Einheit Meter.
Die negative Richtung der Y-Achse des Weltkoordinatensystems ist die Richtung der Schwerkraft.
Im Gerätekoordinatensystem zeigt die X-Achse nach rechts, die Y-Achse nach oben und die Z-Achse aus dem Bildschirm heraus. Bei Geräten, deren Bildschirm gedreht werden kann, basieren die Definitionen von rechts und oben auf der Standardausrichtung. Insbesondere folgt die Standardausrichtung von Android der Systemdefinition. (Querformat ist die Standardausrichtung für Brillen und einige Tablets, Hochformat für Telefone und einige Tablets.) Die Standardausrichtung von iOS ist Hochformat. (Konsistent mit den Definitionen in der IMU-Dokumentation von Android und iOS)
Pose für Object Tracking
Die Objekt-pose von planar image tracking (ImageTracker) und 3D object tracking (ObjectTracker) wird in pose gespeichert und stellt die Pose des aktuell verfolgten target relativ zur camera dar. Sowohl das camera-Koordinatensystem als auch das target-Koordinatensystem sind rechtshändige Koordinatensysteme. Der Ursprung des camera-Koordinatensystems ist das optische Zentrum der Kamera, die positive x-Achse zeigt nach rechts, die positive y-Achse nach oben und die positive z-Achse in die Richtung, in der Licht in die Kamera eintritt (aus dem Bildschirm heraus). (Rechts und oben beziehen sich hier auf rechts und oben im camera-Bild und können von der natürlichen Ausrichtung des Geräts abweichen.) Die Datenanordnung ist row-major, entgegengesetzt zu OpenGLs column-major.
Die pose kann wie folgt geschrieben werden:
Wenn die 3D engine andere Koordinatenachsen-Definitionen verwendet, muss dies beim Setzen der transform-Matrix in der 3D engine berücksichtigt werden. Wenn beispielsweise die z-Richtungen des camera-Koordinatensystems und des target-Koordinatensystems beide entgegengesetzt sind, sollte der transform-Matrixwert des target-Knotens in der 3D engine wie folgt gesetzt werden:
Transform für Motion Tracking
transform von surface tracking (SurfaceTracker) sowie cameraTransform von motion tracking (MotionTrackerCameraDevice), ARKit (ARKitCameraDevice) und ARCore (ARCoreCameraDevice) stellen den transform der camera relativ zum Weltkoordinatensystem dar. Sowohl das camera-Koordinatensystem als auch das Weltkoordinatensystem sind rechtshändige Koordinatensysteme. Der Ursprung des camera-Koordinatensystems ist das optische Zentrum der Kamera, die positive x-Achse zeigt nach rechts, die positive y-Achse nach oben und die positive z-Achse in die Richtung, in der Licht in die Kamera eintritt (aus dem Bildschirm heraus). (Rechts und oben beziehen sich hier auf mobilen Geräten auf rechts und oben in der natürlichen Ausrichtung des Geräts.) Die y-Achse des Weltkoordinatensystems zeigt nach oben (entgegengesetzt zur Schwerkraft), und der Ursprung wird vom motion tracking-System bestimmt. Die Datenanordnung ist row-major, entgegengesetzt zu OpenGLs column-major.
Pose in sparse spatial maps und Mega
getMapPose der sparse spatial map SparseSpatialMap und pose in Mega stellen die Position und Orientierung des map block im camera-Koordinatensystem dar. Sowohl das camera-Koordinatensystem als auch das map block-Koordinatensystem sind rechtshändige Koordinatensysteme. Der Ursprung des camera-Koordinatensystems ist das optische Zentrum der Kamera, die positive x-Achse zeigt nach rechts, die positive y-Achse nach oben und die positive z-Achse in die Richtung, in der Licht in die Kamera eintritt (aus dem Bildschirm heraus). (Rechts und oben beziehen sich hier auf mobilen Geräten auf rechts und oben in der natürlichen Ausrichtung des Geräts.) Die y-Achse des map block-Koordinatensystems zeigt nach oben (entgegengesetzt zur Schwerkraft), und der Ursprung wird durch die map block-Daten bestimmt. Die Datenanordnung ist row-major, entgegengesetzt zu OpenGLs column-major.