Используйте glFrustum вместо gluPerspective, чтобы установить перспективную проекцию. С glFrustum вы определяете проекцию в терминах плоскости, которую хотите отобразить заполнением области просмотра. Псевдокод:
aspect = win.width/win.height
bt = tan( fov/2 )
lr = bt * aspect
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glFrustum( -lr * zclip.near,
lr * zclip.near,
-bt * zclip.near,
bt * zclip.near,
zclip.near, zclip.far)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
vertices = [
(-lr * planedist, -bt * planedist, -planedist),
( lr * planedist, -bt * planedist, -planedist),
( lr * planedist, bt * planedist, -planedist),
(-lr * planedist, bt * planedist, -planedist)
]
draw_vertices(vertices)