正交投影
OpenGL
OpenGL采用的是右手坐标系,z轴朝屏幕向外,因此观察方向是朝着z轴负方向的,那么将x,y,z坐标从区间[l, r], [b,t], [-n, -f]映射到[-1, 1]的函数为...DirectX
DirectX则是采用左手坐标系,z轴和观察方向是一致的,因此只需要将z轴坐标从[n, f]映射到[0, 1],x和y轴则和OpenGL是一样的。...透视投影
OpenGL
设P(Px, Py, Pz, 1)是在视锥体内的一点,那么它在近平面z=-n上的投影点,利用相似三角形原则,可以得到:
类似于正交投影,将x,y轴坐标映射到[-1, 1]...3D点(x, y, z)等价于齐次坐标(-xPz, -yPz, -zPz, -Pz),因此x,y,z分量都乘以-Pz得到:
得到投影矩阵:
变换后的齐次坐标,w分量为-Pz,
DirectX...DirectX的区别在于近平面为z=n,并且要将[n, f]映射到[0, 1],经过类似的计算,可以得到
得到投影矩阵:
参考资料
《3D游戏与计算机图形学中的数学方法》
《实时计算机图形学