OpenGL ES屏幕投影矩阵和相机投影矩阵

Cam*_*mer 8 opengl-es matrix projection-matrix ios

我有一个投影矩阵,来自增强现实应用程序中的相机校准,只要屏幕宽高比与相机图像宽高比匹配,一切都很好.当相机图像与屏幕边缘不匹配时,您将在跟踪中出现失真.

问题场景:

  • 在iPad上播放1280x720视频
  • iPhone 5S上的640x480视频.

工作场景:

  • iPad上的640x480视频
  • iPhone 5S上的1280x720视频.

目标:我想以一般方式处理此屏幕/相机纵横比不匹配.

信箱格式示例

此问题的存在是因为视图在屏幕的纵横比(iPad为4:3)中规范化了设备坐标,而投影矩阵具有相机图像的纵横比(对于720p为16:9).背景图像需要与投影矩阵匹配或增强现实的幻觉失败,所以如果我想在'fit'和'fill'之间切换,我需要更改投影矩阵以匹配图像大小.

注意:我希望在没有OpenGL特定解决方案的情况下处理这个问题.所以我正在寻找一个涉及操纵投影矩阵的更一般的数学答案.

sol*_*xel 1

然而,我意识到我需要将相机的投影矩阵映射到屏幕投影矩阵或者缩放它。

长宽比实际上只是决定屏幕上的内容(即您获得的周边视觉量) - 它不应该从根本上改变投影(假设您保持近端和远端剪辑相同)。

首先要注意的是,并不存在真正的安全映射(即并非屏幕视图中的每个坐标在相机视图中都有对应的坐标,反之亦然)。

为了避免失真,您实际上有两个选择 - 剪辑到两个选项中较窄的一个(丢弃信息)或使用信箱缩小并保持原始宽高比(丢弃屏幕区域)。

两者都感觉应该可以通过将简单的比例因子应用于最终的剪辑空间变换(假设您在平截头体的两侧进行平等剪辑,您应该能够将您想要的轴的剪辑空间坐标相乘)剪辑(比例> 1),或者如果您想要信箱,则缩小倍数(比例< 1))。要使信箱工作,您需要使用 glViewport 或 glScissor 来停止绘制信箱之外的基元。