gpt4 book ai didi

opengl - 视野 + 纵横比 + 投影矩阵的 View 矩阵(HMD OST 校准)

转载 作者:行者123 更新时间:2023-12-02 08:59:39 29 4
gpt4 key购买 nike

我目前正在开发增强现实应用程序。目标设备是光学透视 HMD,我需要校准其显示器以实现虚拟对象的正确注册。我用过那个implementation of SPAAM对于 android 来说,结果对于我的目的来说足够精确。

我的问题是,校准应用程序在输出中给出一个4x4 投影矩阵,例如我可以直接与 OpenGL 一起使用。但是,我使用的增强现实框架仅接受以下格式的光学校准参数:视野某些参数+纵横比某些参数+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

您可以看一下生成此结果的代码 here .

我的理解是单点主动对齐方法产生一个 3x4 矩阵,然后程序将该矩阵乘以正交投影矩阵以获得上面的结果。以下是用于生成正交矩阵的参数:

near : 0.1, far : 100.0, right : 960, left : 0, top :  540, bottom:  0

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

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

我不知道如何获得这些结果。

我从二进制文件中读取这些参数,并且我不知道矩阵是否以行或列主要形式存储。所以这两个矩阵可能需要转置。

我的问题是:是否可能,如果可以,如何从我拥有的投影第一个矩阵中获取这三个参数?

最佳答案

Is it possible, and if yes, how to get these three parameters from the projection matrix I have ?

投影矩阵和 View 矩阵描述了完全不同的变换。投影矩阵描述了从场景的 3D 点到视口(viewport)的 2D 点的映射,而 View 矩阵则描述了观看场景的方向和位置。 View 矩阵由相机位置和 View 目标方向以及相机的向上向量定义。
(参见 Transform the modelMatrix )

这意味着不可能从投影矩阵得到 View 矩阵。但相机定义了一个 View 矩阵。


如果投影是透视的,那么就可以从投影矩阵中得到视场角和长宽比。

enter image description here

透视投影矩阵如下所示:

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

如下:

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

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

fov = 2.0*atan( 1.0/prjMatrix[1][1] ) * 180.0 / PI;

宽高比:

aspect = prjMatrix[1][1] / prjMatrix[0][0];

<子>进一步查看以下问题的答案:
How to render depth linearly in modern OpenGL with gl_FragCoord.z in fragment shader?
How to recover view space position given view space depth value and ndc xy

关于opengl - 视野 + 纵横比 + 投影矩阵的 View 矩阵(HMD OST 校准),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46182845/

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