gpt4 book ai didi

c# - 从 2D 到 3D 的运动

转载 作者:可可西里 更新时间:2023-11-01 03:11:20 25 4
gpt4 key购买 nike

谁能给我一些意见或建议

我需要找出照片中的物体从一个位置移动到另一个位置的程度(实际上我需要计算相机在两张图像之间移动了多少,但是因为物体将保持静止并且只是在其上旋转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);

还有偏斜(我有点卡住了)......

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

最佳答案

世界矩阵 * View 矩阵(相机) * 投影(相机)= 变换矩阵

假设 cube1 = 初始位置。
渲染过程中发生的事情是:cube1 * transformMatrix = output matrix

如果我理解正确的话:您的输入仅允许用户更改相机矩阵( View ),
(和相机= View *投影)并且你想知道相机更新后立方体的新变化。

因此需要进行反转操作:

outputmatrix/transformMatrix = cube1 矩阵(您需要的新矩阵)

从新的 cube1 结果矩阵中,您可以提取角度、运动等。

因此,您的问题更多地与实现“什么”有关,而不是如何实现。
(正如我所见,您熟悉所需的命令和代码)

希望对您有所帮助。

关于c# - 从 2D 到 3D 的运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10011274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com