2017-04-05 55 views
0

我正在使用Vuforia通過相機識別目標。定義目標是在另一個目標

我有標記:小目標和更大的目標。 我需要定義較小的目標放置在較大的目標內。

我已經可以及時看到兩個標記。我可以得到4x4的目標矩陣。 其中一個想法是將4x4到z0x平面的投影映射到兩個目標,而不是定義一個投影矩陣是否包含第二個投影矩陣(但我不知道該怎麼做)

有些代碼怎麼我得到矩陣

- (void) renderFrameWithState:(const Vuforia::State&)state projectMatrix:(Vuforia::Matrix44F&)projectionMatrix { 
//some opengl initializations 
for (int i = 0; i < state.getNumTrackableResults(); ++i) { 
     // Get the trackable 
     const Vuforia::TrackableResult* result = state.getTrackableResult(i); 
     const Vuforia::Trackable& trackable = result->getTrackable(); 

     Vuforia::Matrix44F modelViewMatrix = Vuforia::Tool::convertPose2GLMatrix(result->getPose()); //getPose() returns 3x4 matrix 
} 
} 

回答

1

投影矩陣在同一平面上很容易 - 你已經有了這個代碼,如果你有一個工作的Vuforia樣品。它是這樣的:

SampleUtils::multiplyMatrix(&projectionMatrix.data[0], 
          &modelViewMatrix.data[0] , 
          &modelViewProjection.data[0]); 

不過,我不認爲你真的需要這些項目,你可以簡單地將兩個矩陣從Vuforia得到比較。

檢查一個矩陣是否在另一個矩陣內(不是100%準確,但非常簡單)的一種方法是以中心點和大小爲中心。含義 - 取一箇中心點(矩陣中的x和y位置值分別爲modelViewMatrix.data [12]和modelViewMatrix.data [13]),並查看添加寬度和高度後的點是否在第二矩陣的邊界(同樣,由第二矩陣中心點,寬度和高度)。

+0

因此,我應該爲每個目標使用state.getTrackableResult(i),convertPose2GLMatrix(result-> getPose())來獲得4x4矩陣,並使用4x4矩陣進行上述所有計算?據我瞭解,它不考慮飛機,如果較小的目標將在第二個10釐米以上,它可能會說我的小一個是在第二個裏面,這是正確的嗎? – DenFav

+1

我不認爲這是正確的。但是,您可以使用我爲您提供的投影矩陣方法。無論如何,我認爲你應該嘗試其中一種方法或兩種方法 - 應該很容易。如果有幫助,請參閱以下對其矩陣的一些解釋:http://stackoverflow.com/questions/29061257/get-pure-view-matrix-in-vuforia – yakobom

+0

您能否給出4x4矩陣描述的鏈接。我找不到它,我想確保12和13是一箇中心,也想知道其他值以便以某種方式使用(可能有用) – DenFav

相關問題