2016-07-27 32 views
0

我受的那些坐标系相关功能参数混淆,对于eample相关功能:需要帮助了解探戈的协调系统

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

(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,...);它使用start service and device帧对对TangoService_getPoseAtTime查询进行了严格筛选。

更常见的情况是要在转换的东西(即深度点)到本地原点(即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作为目标引擎类型,结果将会不同。