需要帮助理解Tango与坐标系相关的函数

时间:2016-07-27 10:15:10

标签: google-project-tango

我对与坐标系相关的那些函数的参数感到困惑,例如:

TangoSupport_getMatrixTransformAtTime(double timestamp,
   TangoCoordinateFrameType base_frame, 
   TangoCoordinateFrameType target_frame, 
   TangoSupportEngineType base_engine, 
   TangoSupportEngineType target_engine, 
   TangoSupportDisplayRotation display_rotation_type, 
   TangoMatrixTransformData *matrix_transform)

(1)Base_engine:如果我选择COORDINATE_FRAME_START_OF_SERVICE作为base_frame。如document中所述,坐标系将使用“右手本地级别”。那么,base_engine参数的目的是什么?选择TANGO_SUPPORT_ENGINE_TANGO以外的其他内容是否有意义?

(2)Target_engine:我选择COORDINATE_FRAME_START_OF_SERVICE作为base_frame,选择DEVICE作为目标。为base_engine选择OPENGL。然后为target_engine选择任何值。结果始终相同

1 个答案:

答案 0 :(得分:0)

(1)Base_engine:如果我选择COORDINATE_FRAME_START_OF_SERVICE作为base_frame。如文档中所述,坐标系将使用“右手本地级别”。那么,base_engine参数的目的是什么?选择TANGO_SUPPORT_ENGINE_TANGO以外的其他内容是否有意义?

这实际上取决于您的使用案例。除非您有另一组将启动服务转换为本地原点的转换,否则很少使用Tango坐标作为基础框架。

假设您执行了这样的查询:TangoSupport_getMatrixTransformAtTime(0.0, START_SERVICE, DEVICE, TANGO, TANGO,...);使用TangoService_getPoseAtTime帧对进行start service and device查询是夸张的。

更常见的情况是,您希望将某些内容(即深度点)转换为本地原点(即OpenGL原点)以进行渲染。您要做的是:TangoSupport_getMatrixTransformAtTime(0.0, START_SERVICE, DEPTH, OPENGL, TANGO,...);,此调用的结果为opengl_T_depth_camera,然后您可以将此变换乘以深度相机返回的深度点:P_opengl = opengl_T_depth_camera * P_depth_camera;P_opengl是您可以直接在OpenGL中呈现的点。

(2)Target_engine:我选择COORDINATE_FRAME_START_OF_SERVICE作为base_frame,选择DEVICE作为目标。为base_engine选择OPENGL。然后为target_engine选择任何值。结果始终相同

对于OPENGL和TANGO来说应该如此。有一个快乐的想法,opengl坐标与设备框架坐标相同。因此,如果将TANGO或OPENGL放在target_frame上,结果将是相同的。但是如果你将UNITY作为目标引擎类型,结果会有所不同。