在我的程序中,我定义了一个不对称的梯形视景体在投影矩阵中,并随着用户的位置而改变。在所有z值都在同一位置的平面的情况下,我的程序可以正常工作。然而,如果观看平面稍微旋转一点(沿Y方向旋转),我将通过对ModelView
矩阵进行glRotate
来旋转相机。
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(topLeftX, bottomRightX, bottomRightY, topLeftY, camNear, camFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(xHeadPosition, yHeadPosition, zHead, xHeadPosition, yHeadPosition, zHead -1 , 0, 1, 0);
glTranslatef(400, 0); //Rotating with the right side of the plane as the pivot
glRotatef(yRotation, 0, 1, 0);
glTranslatef(-400, 0);
然而,我希望在投影中做同样的事情,以保持MV矩阵的清洁。我尝试按如下方式进行:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glTranslatef(400, 0); // Pre-multiplication here as opposed to post-mulitplication in MV matrix
glRotatef(yRotation, 0, 1, 0);
glTranslatef(-400, 0);
glFrustum(topLeftX, bottomRightX, bottomRightY, topLeftY, camNear, camFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(xHeadPosition, yHeadPosition, zHead, xHeadPosition, yHeadPosition, zHead -1 , 0, 1, 0);
然而,以上内容并未给出我所需的输出,似乎也没有将投影平面旋转以使视野平面垂直于用户/相机。如何旋转投影平面,使其成为垂直于用户的平面?