我有一个与3D框架(如XNA)无关的3D建模问题。 换句话说,我必须自己运行计算(尽管使用某些框架功能是可以的)。
我有一组N个3D点,我们称之为p1到pN。 虽然这些点是未知的,但是当相机具有由单位矢量U1描述的ORIENTATION时,我知道它们的投影2D位置是什么(pp1到ppN)。
当相机的方向不同时,如何通过不同的矢量U2描述,如何找出这些点的投影?
感谢任何帮助:)
由于
答案 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
您知道M1
,P1
,W1
,V1
和S1
。
鉴于S2
,M2
,P2=P1
,W2=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