EasyAR 座標系
3D 程序中,座標系的定義非常重要。如果沒有特別說明,則採用以下慣例。
向量均爲列向量。
矩陣均採用 row-major。(OpenGL 爲 column-major)
座標系均採用右手座標系。(與 OpenGL 一致)
座標系如果存在物理標尺,則單位使用米。
世界座標系的 Y 軸負方向爲重力方向。
設備座標系的 X 軸向右,Y 軸向上,Z 軸爲屏幕向外;對於屏幕可以旋轉的設備,右和上的定義以其默認方向爲準,特別的,Android 的默認方向遵循系統定義。(眼鏡和部分平板的橫屏放置爲默認方向,手機和部分平板豎屏放置爲默認方向),iOS 的默認方向爲豎屏放置。(與 Android 和 iOS 的 IMU 說明中的定義一致)
物體跟蹤的 pose
平面圖像跟蹤(ImageTracker)和3D物體跟蹤(ObjectTracker)的物體 pose 存放在 pose,表示當前被跟蹤的 target 相對於 camera 的位姿。其中 camera 座標系與 target 座標系均爲右手座標系。camera 座標系的原點爲相機光心,x 軸正方向爲右,y 軸正方向爲上,z 軸正方向爲光線進入相機(出屏幕)的方向。(其中的右和上,指的是相機圖像中的右和上,可能和設備自然方向的可能不同。)數據的排列方式爲 row-major,與 OpenGL 的 column-major 相反。
pose 可寫成:
如果 3D 引擎採用了其他的座標軸定義,則在 3D 引擎中設置變換矩陣時需要考慮,例如 camera 座標系和 target 座標系的 z 方向均相反時,應設置 3D 引擎的 target 結點變換矩陣值爲:
運動跟蹤的 transform
表面跟蹤(SurfaceTracker) 的 transform 和運動跟蹤(MotionTrackerCameraDevice)、ARKit(ARKitCameraDevice)、ARCore(ARCoreCameraDevice)的 cameraTransform,表示 camera 相對於世界座標系的變換。其中 camera 座標系與世界座標系均爲右手座標系。camera 座標系的原點爲相機光心,x 軸正方向爲右,y 軸正方向爲上,z 軸正方向爲光線進入相機(出屏幕)的方向。(其中的右和上,在移動設備上指設備自然方向的右和上。)世界座標系的 y 軸向上(與重力方向相反),原點由運動跟蹤系統決定。數據的排列方式爲 row-major,與 OpenGL 的 column-major 相反。
稀疏空間地圖和 Mega 中的 pose
稀疏空間地圖 SparseSpatialMap 的 getMapPose和 Mega 中的 pose,表示地圖 block 在 camera 座標系中的位置和姿態。其中 camera 座標系與世地圖 block 座標系均爲右手座標系。camera 座標系的原點爲相機光心,x 軸正方向爲右,y 軸正方向爲上,z 軸正方向爲光線進入相機(出屏幕)的方向。(其中的右和上,在移動設備上指設備自然方向的右和上。)地圖 block 座標系的 y 軸向上(與重力方向相反),原點由地圖 block 數據決定。數據的排列方式爲 row-major,與 OpenGL 的 column-major 相反。