我对与坐标系相关的那些函数的参数感到困惑,例如:
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选择任何值。结果始终相同
答案 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作为目标引擎类型,结果会有所不同。