2012-04-04 107 views
16

誰能給我一些意見或建議運動從2D到3D

我需要找到多少在一個拍攝對象從一個位置移動到另一個(以及實際上我需要計算相機擁有多少在2張圖像之間移動,但由於對象將保持靜止並且僅在Y軸上旋轉,我認爲移動圖像會更容易)。幾乎與這個例子一樣,但不太複雜。 enter image description here

所以我採取rubiks立方體的第一光,並選擇4個點上的立方體按這裏 enter image description here 的例子中的圖像是一個Texture2D和藍色圓圈表示4個點的前表面的由用戶選擇的立方體。這4個點存儲在列表中,並且下一個圖像被加載,看起來像這樣 enter image description here 再一次,用戶必須選擇與先前(白臉)相同的臉的4個點。然後這4個點被存儲到一個新的列表中。

所以現在我有兩個列表,我需要從圖像1計算出「整個前臉」多少已經移動(旋轉/縮放/平移)圖像2如下所示 enter image description here

但更重要,我需要用3D計算這個運動!因此,對於第一個圖像,我假設z分量= 0。例如,我假設圖像1的左上角= (10,10,0)。

有沒有一種方法可以「假設」,如果圖像2的面部以某種方式旋轉/縮放/翻譯,可以在3D空間中移動?因此,如果圖像2的左上角位於圖像1(開始圖像)的左上角的右側,則相機必須已經移動到右側。同樣的情況也會出現在點或點上?至於旋轉,我是否可以計算圖像1的點與圖像2的點之間的角度,並以某種方式計算相機旋轉了多少?

對於我的代碼,我在想這樣的事情嗎?

// Image 1 coordinates for the front face 
// Assume z = 0 
cube1 = new List<Vector3>(); 
cube.Add(new Vector3(10, 10, 0)); 
cube.Add(new Vector3(20, 10, 0)); 
cube.Add(new Vector3(10, 20, 0)); 
cube.Add(new Vector3(20, 20, 0)); 

// Get image 2 coordinates 
cube2 = new List<Vector3>(); 
cube.Add(new Vector3(newX, newY, ?)); // Keep Z = 0? 
cube.Add(new Vector3(newX, newY, ?)); 
cube.Add(new Vector3(newX, newY, ?)); 
cube.Add(new Vector3(newX, newY, ?)); 

對於運動向左或向右只是計算多少每個點已經移動

//Translation 
Matrix translating = Matrix.CreateTranslation(new Vector3(amountMovedX, amountMovedY, 0)); 
List<Vector3> imageAfterTranslating = transformListOfVertices(imageAfterScaling, translating); 

而歪斜(IM有點自命不凡)....

// Rotation 
Matrix rotation = Matrix.CreateFromAxisAngle( 
Vector3.Normalize(new Vector3(?, ?, ?)), MathHelper.ToRadians(?)); // Not sure here 
List<Vector3> imageAfterRotation = transformListOfVertices(cube, rotation); 
+1

點是否必須遵循任何規則?像他們必須都是coplaner? – MerickOWA 2012-04-04 17:40:28

+0

對於應用程序的目的,所有點都將被認爲是共面的。因此,用戶只能選擇立方體的一個面,並且所有這些點將被視爲在一個平面上 – heyred 2012-04-12 10:47:54

回答

2

世界矩陣*查看矩陣(相機)*投影(相機)=變換矩陣

假設立方體1 =初始位置。
會發生什麼事時呈現爲:cube1 * transformMatrix =輸出矩陣

如果我理解你正確: 您輸入允許用戶改變相機矩陣(視圖)只,
(和攝像頭=視圖*投影) 並且您想在更新相機後找出立方體的新變形。

所以,你需要做的反轉操作:

outputmatrix/transformMatrix = cube1矩陣(新的一個,你需要)

從新cube1結果矩陣可以提取角度,運動和

因此,您的問題更多地與「實施什麼」相關 - 而不是如何實施。
(正如我看到你的家庭與你需要的命令和代碼)

我希望這可以幫助。