openGL投影矩陣原理及数学推导.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
openGL投影矩陣原理及数学推导

openGL投影矩阵 概述 显示器是2d的。3d场景需要转换为2d图像才能显示在屏幕上。投影矩阵(GL_PROJECTION)用于完成这个工作。投影矩阵将观察坐标(eye coordinates)转换成裁剪坐标(clip coordinates)。然后,裁剪坐标被除以w,转换为规范化的设备坐标(NDC)。 需要记住的一点是,裁剪操作和规范化都由投影矩阵(GL_PROJECTION)完成。下面介绍如何用6个参数(left,right,bottom,top,near,far)构建投影矩阵。 裁剪(clipping)操作是在裁剪坐标上进行的,安排在透视除法执行之前。裁剪坐标xc,yc,zc同wc比较,若每个分量都落在(-wc,wc)外,那么此坐标将被裁剪掉。 在透视投影中,3d场景中的点(观察坐标)从平截头体中映射到正方体(NDC)中;x坐标从[l,r]映射到[-1,1],y坐标从[b,t]映射到[-1,1],z坐标从[n,f]映射到[-1,1]。 注意到,观察坐标系是右手系,规范设备坐标系是左手系。这就有,在观察坐标系中,摄像机朝向沿着-z,而在NDC中,方向沿着z。由于glFrustum()只接受正参数,所以构造投影矩阵的时候要变号。 openGL中,3d场景中,观察坐标系下的点被投影到近投影面。下图展示了观察坐标系点(xe,ye,ze)投影到近投影面上的点(xp,yp,zp)。 从Top View of Projection看,xe投影到xp,根据等比性质: 从Side View of Projection看,yp计算类似: 注意到,xp和yp依赖于-ze,这一点要引起重视。在观察坐标被投影矩阵转换为裁剪坐标后,裁剪坐标仍然是同质坐标。在规范化阶段执行透视除法变为规范设备坐标(NDC)。 因此,可以将wc的值定为-ze。投影矩阵最后一行为(0,0,-1,0) 下一步,将xp,yp映射到xn,yn,此为线性映射[l,r]=[-1,1],[b,t]=[-1,1]: 将xp,yp带入上面结果: 对比(xc/wc,yc/wc)wc=-ze得出上式括号中分别为xc,yc。 由上式的结果可以观察出投影矩阵的第一行、第二行值: 现在只差第三行。Ze总是映射到-n,但是又需要有区分的z值用于裁剪和深度测试,也需要能够实现逆变换。我们看到,z是不依赖x或y,可以借助wc来分析zn和ze的关系。我们设投影矩阵如下: 在观察坐标系中,we等于1,则有: Ze=-n时,zn=-1;ze=-f时,zn=1,将其带入上式有: 有(1)有: 带入(2)有: 将A带入(1)有: 将A、B带入zn,ze关系式: 最后得到投影矩阵: 当视见体是对称的,有r=-l,t=-b,则: 由(3)式看到,ze和zn成反比,ze去[-f,-n],有图像看出,在近投影面zn有较高精度,在远投影面精度低,当区间[-f,-n]增大时,靠近远投影面的点的zn由于过分靠近而超出计算机最大精度(z-fighting),即ze在较远处的细小差别不能在zn上得到表达,而具有相同的zn值。所以,区间[-f,-n]应尽可能短,以避免精度问题。 正投影 不存在透视计算,要做的只是将一个长方体映射成正方体。 齐次项w不再需要,第四行写为(0,0,0,1): 当是对称情况时,r=-l,t=-b:

文档评论(0)

fv45ffsjjI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档