По сути, я понимаю: вам нужна матрица перспективы, которая дает такое же изображение, что и ортографическая проекция, когда объект лежит в плоскости XY.
Итак, начнем: Вы хотите нарисовать свою плоскость в плоскости XY, и у вас было gluOrtho2D(-w, w, -h, h);
(асимметричная ортографическая проекция немного сложнее, если вам это нужно, тогда скажите так).Что вам нужно сделать сейчас:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(2 * atan(h / 2) * 180.0 / PI, w / h, 1, 3);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -2);
То, что я здесь сделал, - это сопоставление центра усеченного проекционного вида на участке плоскости XY, который был виден в ортографической проекции.
Возьмите графики проекций и немного математики, и вы можете сделать это самостоятельно:)
В качестве напоминания я оставлю здесь свой ответ на старый вопрос.
Либо у вас есть орто или перспективная проекция.Вы должны решить за один.Вы не получите перспективу, вращаясь по любой оси.
Зачем вам нужно менять целую программу, просто чтобы изменить режим проецирования?
Одно из возможных решений: я предполагаю, что старый GL с другимматричные режимы и т. д.:
glMatrixMode(GL_PROJECTION); //switch to projection matrix mode
glPushMatrix(); //push the old matrix
glLoadIdentity();
//apply the perspective projection
//do your rendering
glPopMatrix(); //pop the old matrix
С более новой схемой GL вам придется делать большую часть этого самостоятельно, но это должно быть легко.