Почему этот объект рисуется иначе, если я использую glFrustum?
Я делаю этот проект OpenGL для моего класса компьютерной графики, где я отображаю объект, вращаю его и все такое, дело в том, что в начале проекта мы использовали glOrtho()
и это выглядело действительно здорово.
Но теперь учитель сказал, что мы должны использовать glFrustum()
для перспективы, и если я использую эту функцию, объект рисуется так, и я действительно не знаю, почему это происходит:
Это мой код из 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
).
Все зависит от масштаба модели и того, как она расположена относительно камеры. Если часть модели выпадает за пределы плоскости отсечения, то она... ну, будет отсечена.