任何人都可以给我一些建议或意见
我需要找到一张照片中的物体从一个位置移动到另一个位置的多少(实际上我需要计算相机在两个图像之间移动了多少但是因为物体将保持静止并且只是在其Y轴上旋转我认为移动图像会更容易).与此示例几乎相同,但并不那么复杂.

因此,我拍摄了rubiks立方体的第一张照片,并根据此处的示例在立方体上选择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, ?));
Run Code Online (Sandbox Code Playgroud)
向左或向右移动只计算每个点移动了多少
//Translation
Matrix translating = Matrix.CreateTranslation(new Vector3(amountMovedX, amountMovedY, 0));
List<Vector3> imageAfterTranslating = transformListOfVertices(imageAfterScaling, translating);
Run Code Online (Sandbox Code Playgroud)
对于歪斜(我有点卡住)....
// Rotation
Matrix rotation = Matrix.CreateFromAxisAngle(
Vector3.Normalize(new Vector3(?, ?, ?)), MathHelper.ToRadians(?)); // Not sure here
List<Vector3> imageAfterRotation = transformListOfVertices(cube, rotation);
Run Code Online (Sandbox Code Playgroud)
世界矩阵 * (相机的) 视图矩阵 * (相机的) 投影 = 变换矩阵
假设cube1 = 初始位置。
渲染期间发生的情况是:cube1 * transformMatrix = 输出矩阵
如果我理解正确:您的输入允许用户仅更改相机矩阵(视图),
(并且相机=视图*投影)并且您想找出相机更新后立方体的新变换。
所以需要进行反转操作:
输出矩阵 / 变换矩阵 = 立方体 1 矩阵(您需要的新矩阵)
从新的cube1结果矩阵中,您可以提取角度、运动等。
因此,您的问题更多地与要实施“什么”有关,而不是如何实施。
(我发现您熟悉您需要的命令和代码)
我希望这有帮助。