gluLookAt 的相机外在矩阵

Posted

技术标签:

【中文标题】gluLookAt 的相机外在矩阵【英文标题】:camera extrinsic matrix for gluLookAt 【发布时间】:2016-09-27 05:03:03 【问题描述】:

我想使用相机外在矩阵和 gluLookAt 函数在图像上显示模型。

模型被平移到原点,即模型的质心在原点。 (模型坐标以右手为准)

使用 cvFindExtrinsicCameraParams2 函数,我得到了相机外在矩阵 E = [R|t]。

对于这种情况,我想使用 gluLookat 显示 cad 模型。

它有三个参数;相机位置,相机眼睛,相机向上。

我必须输入什么值?

我猜,相机位置是 t :外在矩阵的平移值。

此外,如果旋转和平移为零,则相机通过 (0,0,1) 向量查看模型。因此,如果存在旋转,相机眼睛应该是 R*(0,1,0)。

最后相机向上,如果相机在前面看模型,首先应该是(0,-1,0)。那么新的相机向上向量为 R * (0,-1,0)。

但它并没有给我一个正确的结果。有什么问题?我的错误是什么?

【问题讨论】:

【参考方案1】:

眼睛是相机正在注视的空间点。您当前计算的是它应该看的方向。例如,您可以使用

eye = t + R * [0,0,1];

我想知道您为什么尝试使用 glLookAt 重新创建相机矩阵,因为结果应该正是您已经拥有的外部相机矩阵。

【讨论】:

我使用 opencv 得到了外在矩阵。然后我想使用 opengl 函数(用于着色)显示它。我尝试了 t+r*(0,0,1),但没有显示模型。我不知道为什么.. T_T 因为它在我设置相机时显示模型 (0,0,-z), eye(0,0,0), up(0,-1,0) 然后它显示正确的结果,所以我认为代码是正确的,但是没有正确选择值...

以上是关于gluLookAt 的相机外在矩阵的主要内容,如果未能解决你的问题,请参考以下文章

具有已知内在和外在矩阵的立体视觉 3d 点计算

如何从相机投影矩阵计算 ext 和 int 参数

openGL - 我希望相机更接近物体,如何?

如何使用立体对合成新的相机视图?

解释 OpenGL 如何管理它的变换矩阵

带有锥体的 gluLookAt 未显示预期结果