- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 
                        查看更多
                        
                    
                * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 平行投影 平行投影 OpenGL中的平行投影: 相机并不是能看到任何范围的物体,只能看到在(left, right, bottom, top, near, far)六个平面围起来的长方体(称作视景体)区域中的物体 任何处于这个范围之外的物体都会被裁剪(Clipping)掉,不显示在最终的图像中 OpenGL中的平行投影变换是将这个视景体线性变换到一个中心在坐标原点,边长为2的正方体中 (-1,1,-1,1,-1,1) 平行投影 OpenGL中的平行投影: 我们可以通过先平移变换T,将视景体的中心[(left+right)/2, (bottom+top)/2, -(near+far)/2]平移到坐标原点,变换矩阵为:  平行投影 OpenGL中的平行投影: 接着用一个缩放变换S,将视景体的边长都缩放为2,变换矩阵为:  平行投影 OpenGL中的平行投影: 总的平行投影变换矩阵为:  透视投影 平行线经过透视投影以后相交 符合人类的视觉,近大远小 是我们用的最多的投影方式 透视投影 我们一般要选择一个投影平面,将所有三维物体的坐标(三维)投影到这个平面上(两维)     透视投影      透视投影      最终我们可以推出透视投影变换后的坐标为: 透视投影      我们可以将其写成矩阵形式:      验证矩阵P的变换效果: 透视投影 上面方法的缺点: P不可逆,意味着我们只能从三维的点变换到二维的点,而这个过程不能倒过来 所有点的z坐标经过变换以后全部变成-d,丢失了深度信息,不利于我们在后续的操作中使用隐藏面消除算法 实际我们实现透视投影时,要保留原始的z坐标信息,变换后的点的z坐标跟原始的z坐标成比例,从而保留了深度信息 透视投影 OpenGL中的透视投影:      glFrustum(left, right, bottom, top, near, far); 透视投影 透视投影 OpenGL中的透视投影: 和平行投影一样,相机并不是能看到任何范围的物体,只能看到在(left, right, bottom, top, near, far)六个平面围起来的棱台(称作视景体)区域中的物体 任何处于这个范围之外的物体都会被裁剪(Clipping)掉,不显示在最终的图像中 OpenGL中的透视投影变换是将这个视景体变换到一个中心在坐标原点,边长为2的正方体中 (-1,1,-1,1,-1,1) 透视投影 OpenGL中的透视投影: 我们可以利用上面推导出的P矩阵,稍加修改,使其对原先的z坐标进行一个线性变换,从而保留深度信息 投影平面我们选择 z=-1,也即d=1,此时的变换矩阵为:  透视投影 OpenGL中的透视投影: 经过N矩阵变换以后,原先的视景体从棱锥变换为长方体,原始的深度信息也得到了保存 变换后的z坐标 z’ 为:   z’的范围为-1~1,把原来的近平面z=-near变换成了z’=1;把原来的远平面z=-far变换成了z’=-1; 透视投影 OpenGL中的透视投影: N矩阵中的a,b我们可以使用待定系数法解出来 z=-near时,z’=1;z=-far时,z’=-1,可以解得:  透视投影 OpenGL中的透视投影: 有了a,b,我们得到了矩阵N。经过N矩阵变换以后,原先的视景体从棱锥变换为长方体,剩下的任务就跟平行投影一样了 我们先使用一个平移变换T,将视景体的中心移到坐标原点;再使用一个缩放变换S,将视景体的边长缩放为2 投影变换 投影变换 OpenGL中的透视投影: 上面的矩阵P给出了总的透视投影的变换矩阵(这里实际省掉了一步,OpenGL内部还另外作了一个左、右手坐标系的调整)  投影变换 OpenGL中的透视投影: glFrustum 函数所创建的视景体可以是非对称的视景体 在GLU中提供了另外一种指定视景体和透视投影变换的方法: gluPerspective(fov, aspect, near, far);   投影变换 投影变换 OpenGL中的透视投影: gluPerspective指定的视景体始终是对称的,所以我们一般用这种形式 可以推导出跟glFrustum之间的关系  投影变换 OpenGL中的透视投影:  透视除(Perspective Division) 经过透视投影变换以后我们得到的坐标是齐次坐标 (x,y,z,w)T,其中w不为0 x、y、z都满足下列条件:    裁剪操作就在透视投影之后进行,因此这个
                
原创力文档
                        

文档评论(0)