视场+纵横比+从投影矩阵查看矩阵(HMD OST校准)

Rao*_*oul 4 opengl matrix aspect-ratio perspectivecamera

我目前正在研究增强现实应用程序.目标设备是光学看到的HMD我需要校准其显示器以实现虚拟对象的正确注册.我使用SPA的SPAAM实现来完成它,结果足够精确到我的目的.

我的问题是,校准应用程序在输出中给出了一个4x4 投影矩阵,我可以直接使用OpenGL作为示例.但是,我使用的增强现实框架只接受光学校准参数,格式为Field of View某些参数+ Aspect Ratio某些参数+ 4x4 View矩阵.

这是我有的:

错误格式校正校准结果:

 6.191399, 0.114267, -0.142429, -0.142144
-0.100027, 11.791289, 0.05604,   0.055928
 0.217304,-0.486923, -0.990243, -0.988265
 0.728104, 0.005347, -0.197072,  0.003122
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看生成此结果的代码.

我所理解的是单点有源对准方法产生3×4矩阵,然后程序将该矩阵乘以正交投影矩阵以得到上面的结果.以下是用于生成正交矩阵的参数:

near : 0.1, far : 100.0, right : 960, left : 0, top :  540, bottom:  0
Run Code Online (Sandbox Code Playgroud)

正确格式的校准结果不正确:

Param 1 : 12.465418
Param 2 : 1.535465

 0.995903,   -0.046072,   0.077501,  0.000000   
 0.050040,    0.994671,  -0.047959,  0.000000
-0.075318,    0.051640,   0.992901,  0.000000
 114.639359, -14.115030, -24.993097, 1.000000
Run Code Online (Sandbox Code Playgroud)

我没有关于如何获得这些结果的任何信息.

我从二进制文件中读取这些参数,我不知道矩阵是以行还是列的形式存储.因此,两个矩阵可能必须转置.

我的问题是:是否有可能,如果是的话,如何从投影第一个矩阵得到这三个参数?

Rab*_*d76 13

是否有可能,如果是的话,如何从投影矩阵中得到这三个参数?

投影矩阵和视图矩阵描述了完全不同的变换.虽然投影矩阵描述了从场景的3D点到视口的2D点的映射,但是视图矩阵描述了观察场景的方向和位置.视图矩阵由摄像机位置和方向以及摄像机的向上矢量定义.
(参见转换modelMatrix)

这意味着无法从投影矩阵中获取视图矩阵.但相机定义了一个视图矩阵.


如果投影是透视的,则可以从投影矩阵获得视场角和纵横比.

在此输入图像描述

透视投影矩阵如下所示:

r = right, l = left, b = bottom, t = top, n = near, f = far

2*n/(r-l)      0              0               0
0              2*n/(t-b)      0               0
(r+l)/(r-l)    (t+b)/(t-b)    -(f+n)/(f-n)   -1    
0              0              -2*f*n/(f-n)    0
Run Code Online (Sandbox Code Playgroud)

它跟随:

aspect = w / h
tanFov = tan( fov_y * 0.5 );

p[0][0] = 2*n/(r-l) = 1.0 / (tanFov * aspect)
p[1][1] = 2*n/(t-b) = 1.0 / tanFov
Run Code Online (Sandbox Code Playgroud)

沿Y轴的视角角度(以度为单位):

fov = 2.0*atan( 1.0/prjMatrix[1][1] ) * 180.0 / PI;
Run Code Online (Sandbox Code Playgroud)

宽高比:

aspect = prjMatrix[1][1] / prjMatrix[0][0];
Run Code Online (Sandbox Code Playgroud)


进一步查看以下问题的答案: