У меня есть учебный проект, который представляет собой простую трехмерную сцену. Я модифицирую матрицу Model-view, чтобы переместить точку зрения в некоторую точку, отличную от нуля, используя gluLookAt()
, тогда я помещаю проводную сферу в начало координат. И, наконец, я модифицирую матрицу проекции для получения ортогональной проекции с некоторыми параметрами, используя glOrtho()
. Но при изменении размера окна сфера искажается. Я полагаю, мне следует изменить функции reshape()
и glOrtho()
, но как?Скриншот проекции OpenGL
void display(void){
glClear(GL_COLOR_BUFFER_BIT);
glColor3b(197, 96, 63);
glLoadIdentity();
gluLookAt(2, 0.5 ,2, 0, 0, 0, 0, 1, 0);
glutWireSphere(0.2, 20, 10);
glFlush();
}
void reshape(int w, int h){
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, 0.8 , 100);
glMatrixMode(GL_MODELVIEW);
}
Как бы вы хотели, чтобы ваше содержимое масштабировалось? Letterboxed? Увеличено окно? –
Вам нужно изменить команду 'glOrtho', чтобы уважать« AspectRatio »вашего экрана. В настоящее время вы говорите, что делаете идеальный квадрат. Если вы измените размер своего окна, но не меняете часть вызова функции (-1, 1, -1, 1, ...), glOrtho настроит вашу систему координат, чтобы объекты отображались на экране в идеальном квадрате , даже если видовой экран (w и h) не представляет квадрат. – 2013-02-27 09:06:58