Движение из 2D в 3D

Может ли кто-нибудь дать мне несколько советов или предложений

Мне нужно найти, насколько объект на фотографии переместился из одного положения в другое ( ну, на самом деле мне нужно рассчитать, насколько камера сместилась между двумя изображениями, но поскольку объект будет оставаться неподвижным и просто вращаться вокруг своей оси Y, я думаю, что будет легче перемещать изображение) Почти так же, как в этом примере. но не так сложно. enter image description here

Итак, я делаю первую фотографию кубика Рубика и выделяю 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 повернуто/масштабировано/перемещено определенным образом, его можно перемещать в трехмерном пространстве? Таким образом, если верхний левый угол изображения 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); 

А для перекоса (я немного застрял)....

// Rotation 
Matrix rotation = Matrix.CreateFromAxisAngle( 
Vector3.Normalize(new Vector3(?, ?, ?)), MathHelper.ToRadians(?));   // Not sure here 
List<Vector3> imageAfterRotation = transformListOfVertices(cube, rotation);
16
задан heyred 4 April 2012 в 12:39
поделиться