(转)Cameras on OpenGL ES 2.x

来源:互联网 发布:手机数据网速慢怎么办 编辑:程序博客网 时间:2024/05/07 07:08

转:http://blog.db-in.com/cameras-on-opengl-es-2-x/
介绍OpenGL es中的MVP矩阵比较好的文章,有空要把他翻译过来
在这篇文章里,我将讲一个在3D世界里非常重要的部分。就像你们了解的一样,在设备显示屏后面的世界试图去重建人眼中的美妙和复杂。为了实现它,我们使用了摄像头,它是人眼在现实世界中的模拟。我们使用数学公式去创建这个摄像头。
在这篇文章中,后面我将探讨这些摄像头和公式,凹凸镜头的区别,讲讲什么是投影,矩阵,四元数,以及非常有名的mvp矩阵。如果你有什么疑问,尽管提出,我非常乐意去帮你们解答。以下是本篇内容的目录列表,它将帮你在这篇文章中找到一些你想要的东西。
目录

概要
首先让我们看看摄像头的基础,他在真实世界中的工作原理,凹凸镜的区别,怎样缩放,平移,旋转的。了解了这些概念之后,让我们深入了解OpenGL,并了解所有这些概念如何适用到我们的应用程序。所以最后我们进行编码,我会提供他们依赖的公式以及对应的解释。
你是否记得我的OpenGL系列教程中,我说过,Khronos已经被委托了很多职责去专注3D世界中最重要的部分。(more precisely from the part1, if not, you can check it here)那么,从openGL ES 1.x到2.x,摄像头是Khronos委托的那些职责之一。现在我们要自己创建这些摄像头了。想知道吗?通过着色器行为,我们可以对应用程序进行令人惊奇的控制,此外我们可以自由的去搭建一个3D引擎。
使用OpenGL控制摄像头的话,我们只有2,3种可以使用的摄像头。但如果我们对摄像头进行编程时,我们可以创建各种各样的摄像头。在这篇文章里,我将讲讲几个基础的摄像头:正交摄像头和透视摄像头。
OK,Let’s start!

真实世界中的摄像头
人眼是一个凸透镜,它会聚集图像在视网膜上形成一个上下颠倒图像,通常相机的镜头是有多个凸透镜和凹透镜组成的,但最终的图像看起来更像一个凸透镜形成的,就像人的眼睛一样。
最终图像是由许多因素决定的,并不止镜头的类型,但在普通的世界里,下图展示了图片在经过各种透镜后的现实效果。
这里写图片描述
两种类型透镜都能生成一个与原图对应的图像,我的意思是,会有一个微小的扭曲角度,这取决于物体与镜头距离和视角。下图展示了摄像头中最重要的属性。
这里写图片描述
上图中的红色区域对摄像机来说是不可见的,所以在这些区域内任何片元都将被剪裁掉,“Depth of Field”是可见区域,所有在该区域内的片元都可见。通常,“Depth of Field”这个词也用来描述一个特殊的效果,即镜片模糊效果。当人眼具有使外部对象看起来模糊的焦点时,透镜模糊效果模拟焦点,使得焦点之外的对象看起来模糊。那么我为什么不把“Focus”这个属性放到上面的图片中内?因为在一些摄像机中,焦点是一个特殊的特征,基础的3D摄像头并没有实现焦点行为。另一个重要的属性是“视角(Angle of View)”它表示相机可见的水平角度。所有在这个视角之外的片元摄像机都不可见。有事“视角”也用来表示垂直区域,但通常我们更喜欢使用宽度和高度来定义最终图像的宽高比。
现代摄像机非常准确,可以使用这些属性和镜头类型组合产生很好的效果。现在让我们回到虚拟世界,看看我们如何在数学上转换这些属性和行为。在转移到3D摄像机前,我们要理解3D世界里的一些数学知识。
3D世界简史
3D的鼻祖是欧几里得。他生活在公元前323-283,在希腊的亚历山大。他创建了我们至今还在用的欧几里得空间和欧几里得定理。基本上,欧几里得空间由3个平面组成,分别是x,y和z。不难想象为什么欧几里得创造了这个理论,因为希腊人热爱建筑学,为了构造完美的结构,他们需要在3D虚拟世界中创建很多微积分,跟不用说他们对哲学和科学的激情了。
OK,他们做的跟摄像机有什么关系呢?很简单,基于他们的发明,我们开始使用4x4矩阵去处理坐标转换,并且用四元组去描述在四维空间中的一个点(XYZW)。其中W是一个齐次坐标的元素。这里我不打算讲它,只是让你知道,齐次坐标是August Ferdinand Möbius于1827年发明,用来表示笛卡尔坐标系中无限大空间的概念的。我们将在后面介绍Möbius的贡献。在这之前,用笛卡尔坐标系统去表示无限的空间比较复杂,虽然我们可以用一个复杂的虚数去表示它,但这样不是很方便去计算。所以为了解决这个问题,Möbius 增减了一个变量W,它是一个实数,可以让我们回到实数空间去。关键是,一个4x4的矩阵和4元组很吻合,因为我们可以用一个矩阵把欧几里得变换转换到3D世界中,所以我觉得同样用一个4x4矩阵去处理3D世界里的摄像机也是合理的

0 0
原创粉丝点击