Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / OpenGL中投影矩阵的推导

本文主要是对OpenGL红宝书(第八版)第五章中给出的透视投影矩阵和正交投影矩阵做一个简单推导。投影矩阵的目的是:原始点P(x,y,z)对应后投影点P"(x",y",z")满足x",y",z"∈[-1,1]。OpenGL编程指南(原书第八版2013年最新)英文PDF 下载见 http://www.linuxidc.com/Linux/2015-08/122230.htmOpenGL编程指南(原书第7版)中文扫描版PDF 下载见  http://www.linuxidc.com/Linux/2012-08/67925.htm 一、透视投影                                                                                                                    下图为透视投影的视锥体:注:上图中忘了标注了,远裁剪平面距离原点距离为f,近裁剪平面距离原点距离为n。设P(x0, y0, z0),我们分别求各个坐标在投影后的值。将P点投影到近平面上,首先看x方向上的投影,沿着过P点,且平行于xoz平面切一刀,有如下图:假设投影后的x坐标为:x_n(在近裁剪平面的投影),由相似三角形的性质,有,可以得到:同理,有这样其实实现了透视投影,近大远小的效果,因为z0越大,则x1,y1就越小。为了将这两个值转换到[-1,1]区间内,设l和r分别为近裁剪平面左、右边框的x坐标,即l=-w/2,r=w/2(如图所示,w为上下边框的长度),为了使任何投影到近裁剪平面的点都在区间内,转换后,[l",r"]∈[0,1],其中l",r"分别为l和r转换后的值。因为是线性转换,可领x"=kx+b,则下式成立:求得,再根据之前的结果,可以得到归一化后的x坐标为:同理,设t和p分别为近裁剪平面上下边框的y坐标,则:投影后的坐标都有一个共同因子——[-1/z0],正好对应变换后w=-z0。接下来,我们看z要满足什么要求。为简化讨论,根据以上结论,我们假设透视变换有下述形式:于是:最后的变换矩阵如下:OpenGL超级宝典 第4版 中文版PDF+英文版+源代码 见  http://www.linuxidc.com/Linux/2013-10/91413.htmOpenGL 渲染篇 http://www.linuxidc.com/Linux/2011-10/45756.htmUbuntu 13.04 安装 OpenGL http://www.linuxidc.com/Linux/2013-05/84815.htmOpenGL三维球体数据生成与绘制【附源码】 http://www.linuxidc.com/Linux/2013-04/83235.htmUbuntu下OpenGL编程基础解析 http://www.linuxidc.com/Linux/2013-03/81675.htm如何在Ubuntu使用eclipse for c++配置OpenGL http://www.linuxidc.com/Linux/2012-11/74191.htm 更多《OpenGL超级宝典学习笔记》相关知识 见 http://www.linuxidc.com/search.aspx?where=nkey&keyword=34581本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-08/122229.htm