opengl中使用Frustum来设置透视投影,函数原型:
frustum(float left, float right, float buttom, float top, float near, float far);
注意,near的值不能为0。对于near不能为0,这里有数学上的解释,但其中关于“far和near的比例越大,区分临近表面的有效深度缓冲区就越少。”这句话有点不理解,按照我的理解应该是整个深度缓冲区的精度都丢失了,因为far/near无穷大。
从透视投影矩阵的推导过程理解,
xp = xe* near / -ze;
xp是投影后的坐标,xe是摄像机坐标系下的坐标,near为0,xp恒为0.推导原理是根据相似三角形。
透视投影的推导请参考:
http://www.songho.ca/opengl/gl_projectionmatrix.html