Qualcomm AR的Unity3D代碼中,在QCARManagerImpl類獲得圖像,並進行識別、跟蹤物體,得到目標物體的姿態(位置和旋轉量)。所有的更新操作,在QCARManagerImpl.Update()中實現。
主要使用到的相關的數據結構
ImageHeaderData圖像頭結構體
public struct ImageHeaderData
{
public int width;
public int height;
public int stride;
public int bufferWidth;
public int bufferHeight;
public int format;
public int reallocate;
public int updated;
public IntPtr data;
}
FrameState結構體包含了識別跟蹤到的數據
private struct FrameState
{
public int numTrackableResults;
public int numVirtualButtonResults;
public int frameIndex;
public IntPtr trackableDataArray;
public IntPtr vbDataArray;
public int numWordResults;
public IntPtr wordResultArray;
public int numNewWords;
public IntPtr newWordDataArray;
public IntPtr videoModeData;
}
numTrackableResults:找到的跟蹤目標個數
numVirtualButtonResults:虛擬按鍵的個數
frameIndex:幀的索引號
trackableDataArray:跟蹤結果數據(指向TrackableResultData結構體)
vbDataArray:虛擬按鍵跟蹤結果
numWordResults:識別文字個數
wordResultArray:識別跟蹤的文字結果數據
TrackableResultData結構體包含了圖像識別跟蹤的數據
public struct TrackableResultData
{
public PoseData pose;
public TrackableBehaviour.Status status;
public int id;
}
pose:pose數據
status:跟蹤狀態,爲如下枚舉中的一個值
public enum Status
{
NOT_FOUND = -1,
UNKNOWN = 0, ///< The state of the TrackableResult is unknown
UNDEFINED = 1,///< The state of the TrackableResult is not defined
DETECTED = 2,///< The TrackableResult was detected
TRACKED = 3 ///< The TrackableResult was tracked
}
id:目標的id號
PoseData結構體包含了姿態
public struct PoseData
{
public Vector3 position;
public Quaternion orientation;
}
position:位置
orientation:旋轉量