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

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

问题场景:

> iPad上的1280×720视频
> iPhone 5S上的640×480视频.

工作场景:

> iPad上的640×480视频
> iPhone 5S上的1280×720视频.

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

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

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

解决方法

However,I realize I need to map the camera’s projection matrix to the
screen projection matrix or perhaps scale it.

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

首先要注意的是,实际上没有安全的映射(即屏幕视图中的每个坐标都不具有相机视图中的等效坐标,反之亦然).

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

两者都觉得应该可以将一个简单的比例因子应用于最终的剪辑空间变换(假设你在平截头体的两侧均匀地剪辑,你应该能够增加你想要的轴的剪辑空间坐标.剪辑(比例> 1),或多个向下(比例< 1),如果你想要信箱).要使letterBoxing工作,你需要使用glViewport或glScissor来停止绘制信箱之外的基元.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...