2016-07-27 105 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作爲目標引擎類型,結果將會不同。