调用glFrustum(l,r,b,t,n,f) 生产投影矩阵R
有时候我们需要通过投影矩阵来反求出frustum的6个参数,可以通过下面的步骤
float m_ProjectionMatrixData[16], l, r, b, t, n, f;
glGetFloatv(GL_MODELVIEW_MATRIX, m_ProjectionMatrixData);
n = m_pProjectionMatrix[14] / (m_pProjectionMatrix[10] - 1.0f);
f = m_pProjectionMatrix[14] / (m_pProjectionMatrix[10] + 1.0f);
r = n * (m_pProjectionMatrix[8] + 1.0f) / m_pProjectionMatrix[0];
l = n * (m_pProjectionMatrix[8] - 1.0f) / m_pProjectionMatrix[0];
t = n * (m_pProjectionMatrix[9] + 1.0f) / m_pProjectionMatrix[5];
b = n * (m_pProjectionMatrix[9] - 1.0f) / m_pProjectionMatrix[5];