有人可以给我一些建议或建议吗?
我需要找出照片中的对象从一个位置移动了多少(实际上我需要计算相机在两个图像之间移动了多少,但由于物体将保持静止并仅在其Y轴上旋转,因此我认为移动图像会更容易)。与此示例几乎相同,但不太复杂。
所以我首先拍摄魔方的第一张照片,并根据这里的示例选择魔方上的4个点 该图像是一个Texture2D,蓝色圆圈表示用户选择的正面4个点。这4个点存储在列表中,并加载下一个图像,看起来像这样 同样,用户必须选择与先前相同面的4个点(白色面)。 然后将这些4个点存储到新列表中。
现在我有两个列表,需要计算“整个正面”从图像1到图像2的移动量(旋转/缩放/平移),如下所示:
更重要的是,我需要在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);
至于偏斜(我有点卡住了)....
// Rotation
Matrix rotation = Matrix.CreateFromAxisAngle(
Vector3.Normalize(new Vector3(?, ?, ?)), MathHelper.ToRadians(?)); // Not sure here
List<Vector3> imageAfterRotation = transformListOfVertices(cube, rotation);