Почему этот объект рисуется иначе, если я использую glFrustum?

Я делаю этот проект OpenGL для моего класса компьютерной графики, где я отображаю объект, вращаю его и все такое, дело в том, что в начале проекта мы использовали glOrtho() и это выглядело действительно здорово.

glOrthoOBJ

Но теперь учитель сказал, что мы должны использовать glFrustum() для перспективы, и если я использую эту функцию, объект рисуется так, и я действительно не знаю, почему это происходит:

glFrustumOBJ

Это мой код из init() функция, где все меняется:

void init (void)
{
    /*  select clearing (background) color       */
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-100.0, 100.0, -60.0, 160.0, -100.0, 100.0);
    //glFrustum(-100, 100 ,-100 ,100 ,1 , 40);


    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glRotatef(90,0,1,0);
}

Буду признателен за вашу помощь.

РЕДАКТИРОВАТЬ: Если я использую glFrustum(-100, 100, -100, 100, 20, 200), это выглядит так, как будто я становлюсь ближе, но как насчет параметров left, right, top и bottom? Они в порядке с этими ценностями?

1 ответ

Решение

Трудно быть уверенным без дополнительной информации. Возможно, модель могла бы дать некоторое представление. Но я подозреваю, что это может быть связано с вашими самолетами отсечения (nearVal а также farVal как описано здесь) аргументы переданы glFrustum (1, 40). Возможно, попробуйте установить их в более широкий диапазон, как ваш glOrtho вызов: 1, 150 (Примечание: ни nearVal или же farVal может быть отрицательным при передаче glFrustum).

Все зависит от масштаба модели и того, как она расположена относительно камеры. Если часть модели выпадает за пределы плоскости отсечения, то она... ну, будет отсечена.

Другие вопросы по тегам