三维建模问题

时间:2009-09-07 17:20:20

标签: 3d xna

我有一个与3D框架(如XNA)无关的3D建模问题。 换句话说,我必须自己运行计算(尽管使用某些框架功能是可以的)。

我有一组N个3D点,我们称之为p1到pN。 虽然这些点是未知的,但是当相机具有由单位矢量U1描述的ORIENTATION时,我知道它们的投影2D位置是什么(pp1到ppN)。

当相机的方向不同时,如何通过不同的矢量U2描述,如何找出这些点的投影?

感谢任何帮助:)

由于

2 个答案:

答案 0 :(得分:1)

你做不到。当您只知道摄像机的位置和方向以及点的投影时,您不知道该点的实际位置 - 它可以是从摄像机到投影平面到无限远的一条线上的任何位置。因此,您甚至无法分辨(在一般情况下)相机在不同位置和方向上是否可见该点。

但是如果你对点有所了解 - 例如它们形成一个已知大小的立方体 - 你可以利用这些知识和点的投影来计算点的位置,然后找到点的投影。其他相机位置和方向。

答案 1 :(得分:1)

我在这里完全错了,因为我很长时间没有触及3D数学或矩阵。

基于http://www.songho.ca/opengl/gl_transform.html

公式:

D * M * P * W * V = S
Data * Model * Perspective * W * Viewport = Screen

您知道M1P1W1V1S1
鉴于S2M2P2=P1W2=W1,您正在寻找V2=V1。 此外,您知道D1=D2(3D点不移动)。

D1 * M1 * P1 * W1 * V1 = S1
D1 * M2 * P1 * W1 * V1 = S2

解决D1并将它们等同起来:

D1 = S1 * M1^-1 * P1^-1 * W1^-1 * V1^-1
D1 = S2 * M2^-1 * P1^-1 * W1^-1 * V1^-1
S1 * M1^-1 * P1^-1 * W1^-1 * V1^-1 = S2 * M2^-1 * P1^-1 * W1^-1 * V1^-1

删除类似条款:

S1 * M1^-1 = S2 * M2^-1

现在解决S2:

S1 * M1^-1  * M2 = S2