看起来你在调用gluPerspective()时使用了1.0作为宽高比。你应该使用宽度/高度。例如,如果你的视口大小是640x480,那么你应该使用1.33333作为宽高比参数。
void gluPerspective( GLdouble fovy,
GLdouble aspect,
GLdouble zNear,
GLdouble zFar )
宽高比应该是您的窗口宽度和高度的函数。具体来说,是宽度除以高度(但要注意除以零的情况)。
也许您正在使用1作为宽高比,但除非您的窗口是正方形,否则这是不准确的。
看起来你的gluPerspective调用中的aspect参数需要调整。请参见Man页面。如果你的窗口是物理正方形,那么宽高比将为1,你的问题就会消失。然而,你的窗口是矩形的,所以视锥体需要是非正方形的。
将宽高比设置为window_width / window_height,你的椭圆应该看起来正确。请注意,每当窗口调整大小时都需要更新它;如果你使用GLUT,请设置glutReshapeFunc并在其中重新计算投影矩阵。