深度探讨透视投影坐标系.doc
《深度探讨透视投影坐标系.doc》由会员分享,可在线阅读,更多相关《深度探讨透视投影坐标系.doc(10页珍藏版)》请在咨信网上搜索。
1、个人收集整理 勿做商业用途3d图形程序,就一定会做坐标变换.而谈到坐标变换,就不得不提起投影变换,因为它是所有变换中最不容易弄懂的。但有趣的是,各种关于透视变换的文档却依然是简之又简,甚至还有前后矛盾的地方。看来如此这般光景,想要弄清楚它,非得自己动手不可了。所以在下面的文章里,作者尝试推导一遍这个难缠的透视变换,然后把它套用到 DX和 PS2lib 的实例中去。1. 一般概念 所谓透视投影变换,就是view 空间到project 空间的带透视性质的坐标变换步骤(这两个空间的定义可以参考其他文档和书籍).我们首先来考虑它应该具有那些变换性质。很显然,它至少要保证我们在view空间中所有处于可视
2、范围内的点通过变换之后,统统落在project空间的可视区域内。好极了,我们就从这里着手-先来看看两个空间的可视区域.由于是透视变换,view空间中的可见范围既是常说的视平截体(view frustum).如图,(图1)它就是由前后两个截面截成的这个棱台。从view空间的x正半轴看过去是下图这个样子。(图2)接下来是project空间的可视范围。这个空间应当是处于你所见到的屏幕上。实际上将屏幕表面视作project空间的xoy平面,再加一条垂直屏幕向里(或向外)的z轴(这取决于你的坐标系是左手系还是右手系),这样就构成了我们想要的坐标系。好了,现在我们可以用视口(view port)的大小来描
3、述这个可视范围了.比如说全屏幕640*480的分辨率,原点在屏幕中心,那我们得到的可视区域为一个长方体,它如下图(a)所示。(图3)但是,这样会带来一些设备相关性而分散我们的注意力,所以不妨先向DirectX文档学学,将project空间的可视范围定义为x1,1, y-1,1, z0,1的一个立方体(上图b)。这实际上可看作一个中间坐标系,从这个坐标系到上面我们由视口得出的坐标系,只需要对三个轴向做一些放缩和平移操作即可。另外,这个project坐标系对clip操作来说,也是比较方便的。2. 推导过程 先从project空间的x正半轴看看我们的变换目标。(图4)这个区域的上下边界为y=1, 而
4、图2中的上下边界为y = z * tan(fov/2),要实现图2到图4的变换,我们有y = y * cot(fov/2) / z。这下完了,这是一个非线性变换,怎么用矩阵计算来完成呢?还好我们有w这个分量。注意到我们在做投影变换之前所进行的两次坐标变换world变换和view变换,他们只是一系列旋转平移和缩放变换的叠加。仔细观察这些变换矩阵,你会发现它们其实不会影响向量的w分量。换句话说,只要不是故意,一个w分量等于1的向量,再来到投影变换之前他的w分量仍旧等于1。好的,接下来我们让w= wz, 新的w就记录下了view空间中的z值。同时在y分量上我们退而求其次,只要做到y = y * co
5、t(fov/2)。那么,在做完线性变换之后,我们再用向量的y除以w,就得到了我们想要的最终的y值。x分量的变换可以如法炮制,只是fov要换一换。事实上,很多用以生成投影变换矩阵的函数都使用了aspect这个参数。这个参数给出了视平截体截面的纵横比(这个比值应与view port的纵横比相等,否则变换结果会失真).如果我们按照惯例,定义aspect = size of X / size of Y。那么我们就可以继续使用同一个fov而给出x分量的变换规则:x = x cot(fov/2) / aspect。现在只剩下z分量了.我们所渴望的变换应将z = Znear 变换到z = 0,将z = Zf
6、ar变换到z = 1。这个很简单,但是等等,x, y最后还要除以w,你z怎能例外。既然也要除,那么z = Zfar 就不能映射到z = 1了。唔,先映射到z = Zfar试试。于是,有z = Zfar*(zZnear)/(Zfar Znear).接下来,看看z/z的性质.令f(z) = z/z = Zfar*(zZnear)/(z*(Zfar Znear).则f(z) = Zfar * Znear / ( z2 * (Zfar Znear ), 显而易见f(z) 0。所以除了z = 0是一个奇点,函数f(z)是一个单调增的函数。因此,当ZnearzZfar时,f(Znear)f(z)f(Zfa
7、r),即0f(z)1。至此,我们可以给出投影变换的表达式了。x = xcot(fov/2)/aspecty = y*cot(fov/2)z = zZfar / ( Zfar Znear ) ZfarZnear / ( Zfar Znear )w = z以矩阵表示,则得到变换矩阵如下,cot(fov/2)/aspect 0 0 00 cot(fov/2) 0 00 0 Zfar/(Zfar-Znear) 10 0 -ZfarZnear/(ZfarZnear) 0。做完线性变换之后,再进行所谓的“归一化”,即用w分量去除结果向量。现在我们考虑一下这个变换对全view空间的点的作用。首先是x和y分量
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 深度 探讨 透视 投影 坐标系
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。