opengl投影透视矩阵的个人总结

来源:互联网 发布:深圳青年旅舍 知乎 编辑:程序博客网 时间:2024/05/16 04:53

预备知识

1.opengl的透视投影矩阵是把一个棱锥视见体转化为规范化视见体的投影矩阵。所谓规范化视见体,就是由x=+-1, y=+-1, z=+-1围成的视见体。


2.透视投影基础:透视投影的数学原理是相似三角形。 视见体中的一个点(x,y,z)沿着向量它和原点的连线,投影到透视平面z = d上,投影所得到的点坐标设为(xp,yp,d)。根据相似三角形原理,有xp/d = x /z,故xp = x/z*d。同理,yp = y/z*d。



3.齐次坐标在透视投影当中的作用:我们知道,一个三维坐标点的齐次坐标形式是(x,y,z,w)。当w为1时,(x,y,z)即为点的三维坐标,否则需要用w去除x,y,z。下面的投影矩阵把点(x,y,z,w)变成(x,y,z,z/d)。用z/d去除x,y,z,得到的结果是:

x = x/z*d

y = y/z*d

z = z/z*d = d


推导

1.推导过程可参见这篇文章,写的很清楚,也很容易理解。他是先推导出新点和原来的点的数学关系,再根据这种关系构造矩阵。

2.我看的书《交互式计算机图形学——基于OpenGL着色器的自顶向下方法》(第六版)则是先考虑投影平面x,y取值范围在[-1,1]的情况,推出投影规范矩阵N,然后再拓展到一般情况(x,y取值范围任意)。先通过一个错切变换把投影平面变换为关于z轴对称(即x,y的取值范围关于0对称),把这个变换所需要的矩阵记作H,再通过一个缩放变换S把投影平面的x,y取值范围缩放到[-1,1]之间,最后把这三个矩阵合并起来,P = HSN即为所求。推导的过程比较啰嗦,不如第一种推导过程来的简单。


最后得出的透视投影矩阵


0 0
原创粉丝点击