当前位置:  开发笔记 > 编程语言 > 正文

3d到2d投影矩阵

如何解决《3d到2d投影矩阵》经验,为你挑选了1个好方法。

我在3D空间中有3个点我知道确切的位置.假设他们是:(x0,y0,z0),(x1,y1,z1)(x2,y2,z2).

此外,我有一个相机正在查看这3个点,我知道这三个点在相机视图平面上的2D位置.因此,举例来说,(x0,y0,z0)将是(x0',y0'),(x1,y1,z1)将来(x1',y1')(x2,y2,z2)将是(x2',y2')从相机的角度来看.

找到将这些3D点投影到摄像机视图平面上的2D点的投影矩阵的最简单方法是什么.我们对相机位置一无所知.



1> tye..:

这给你两组,每组三个变量中的三个方程:

a*x0+b*y0+c*z0 = x0'
a*x1+b*y1+c*z1 = x1'
a*x2+b*y2+c*z2 = x2'

d*x0+e*y0+f*z0 = y0'
d*x1+e*y1+f*z1 = y1'
d*x2+e*y2+f*z2 = y2'

在你的情况下,使用任何解决联立方程的方法都是最简单的(甚至难以"手工"解决这些问题).那么你的变换矩阵就是((a,b,c)(d,e,f)).

...

实际上,这是过度简化的,并假设相机指向3D坐标系的原点而没有透视.

对于透视图,转换矩阵更像是:

               ( a, b, c, d )   ( xt )
( x, y, z, 1 ) ( e, f, g, h ) = ( yt )
               ( i, j, k, l )   ( zt )

( xv, yv ) = ( xc+s*xt/zt, yc+s*yt/zt ) if md < zt;

但是4x3矩阵比12自由度更受约束,因为我们应该有

a*a+b*b+c*c = e*e+f*f+g*g = i*i+j*j+k*k = 1
a*a+e*e+i*i = b*b+f*f+j*j = c*c+g*g+k*k = 1

所以,你应该可能有4点拿到8个方程覆盖摄像机位置和角度以及1对多6个变量的2-d观点的比例,因为我们将能够消除"中心"坐标(XC,YC ).

因此,如果你有4个点并将你的2-D视点转换为相对于显示器的中心,那么你可以在13个变量中得到14个联立方程并求解.

不幸的是,六个方程不是线性方程.幸运的是,这些方程中的所有变量都被限制在-1和1之间的值,因此解算方程仍然是可行的.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有