我有一个“普通”的opengl场景,并希望用一个简单的四边形覆盖这个场景。
gl.glMatrixMode(GL_PROJECTION);
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glMatrixMode(GL_MODELVIEW);
gl.glPushMatrix();
gl.glLoadIdentity();
gl.glTranslatef(-0.8f, 0.0f, 0.0f);
// draw background
gl.glBegin(GL_QUADS); // of the color cube
gl.glColor3f(1.0f, 0.5f, 0.5f);
gl.glVertex3f(0, 0, 1.0f);
gl.glVertex3f(0.5f, 0, 1.0f);
gl.glVertex3f(0.5f, 0.5f, 1.0f);
gl.glVertex3f(0, 0.5f, 1.0f);
gl.glEnd();
gl.glMatrixMode(GL_PROJECTION);
gl.glPopMatrix();
gl.glMatrixMode(GL_MODELVIEW);
gl.glPopMatrix();
你可以在屏幕截图中看到,新的矩阵被扭曲了。彩色线是轴。
现在的问题是:如何为我的矩阵设置宽高比(如在gluPerspective中)以呈现正确的小队?
答案 0 :(得分:2)
您需要考虑视口的大小和形状。转换在“标准化坐标”中完成。这意味着视口的左下角是(0,0),视口的右上角是(1,1)。您的投影矩阵需要考虑视口的形状以补偿并使您的四边形变为正方形。
视口的高度和宽度之比称为“纵横比”。
请参阅this page,问题的重要部分是视野和图像宽高比。这里有太多内容可以发布可用的摘录。您应该毫不费力地查找投影矩阵纵横比的资源,以及如何计算正确的投影矩阵。