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

8
我在增强现实应用程序中使用相机校准得出的投影矩阵。只要屏幕宽高比与相机图像宽高比匹配,一切都很好。当相机图像与屏幕不完全匹配时,跟踪会出现扭曲。
问题场景:
- iPad 上的 1280x720 视频 - iPhone 5S 上的 640x480 视频
正常工作的场景:
- iPad 上的 640x480 视频 - iPhone 5S 上的 1280x720 视频
目标:我希望以一种通用的方式处理屏幕/相机宽高比不匹配的情况。 Example of letterbox format 这个问题存在,因为视图具有屏幕宽高比的归一化设备坐标(iPad 的宽高比为 4:3),而投影矩阵具有相机图像的宽高比(720p 的宽高比为 16:9)。背景图像需要与投影矩阵匹配,否则增强现实的幻觉就会失败。因此,如果我想在“适合”和“填充”之间切换,我需要更改投影矩阵以匹配图像大小。
注意:我希望处理这个问题时不需要 OpenGL 特定的解决方案。因此,我正在寻找一种更通用的数学答案,涉及操作投影矩阵。
2个回答

1
然而,我意识到需要将相机的投影矩阵映射到屏幕投影矩阵或者进行缩放。
纵横比只是决定屏幕上显示的内容(即您能够看到的周边视野),它不应该从根本上改变投影(假设您保持近和远裁剪平面不变)。
首先要注意的是,没有真正安全的映射方法(即屏幕视图中的并不是每个坐标都在相机视图中都有等效物,反之亦然)。
为了避免失真,您真正有两个选择 - 裁剪到两个选项中较窄的一个(丢弃信息)或使用信封式缩小并保持原始纵横比(丢弃屏幕区域)。
两种方法都感觉应该可以通过简单地应用比例因子来实现最终的裁剪空间变换(假设您在视锥体的两侧同样裁剪,则应该能够将所需裁剪轴的裁剪空间坐标乘以倍数(缩放>1)或除以因子(缩放<1)如果您想使用信封式,则需要使用glViewport或glScissor停止在信封之外的原始图元被绘制。

0

避免处理投影矩阵

虽然不如数学解决方案令人满意,但简单的方法是将场景放置在与相机图像大小相同的视图中。然后将该视图放置在包含视图中。然后调整整个视图的大小以匹配屏幕或填充屏幕大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接