Я тяну несколько форм (таких как круги), которые выключаются высоты окна и ширины. Так как окно всегда запускается в данном размере, они привлечены правильно, но когда окно изменено, это портит соотношение сторон.
Как я могу потянуть формы правильно, независимо от размера окна?
Вы определенно не хотите, чтобы размер ваших объектов явно зависел от размера окна.
Как уже было предложено genpfault, корректируйте матрицу проекции при каждом изменении размера окна.
Что нужно делать при изменении размера окна:
Настроить видовой экран
glViewport(0, 0, width, height)
Настроить прямоугольник ножниц (только если у вас включен GL_SCISSOR_TEST
)
glScissor(0, 0, width, height)
Настройка матрицы проекции
В случае устаревшего (конвейер фиксированных функций) OpenGL, вы можете сделать это следующими способами:
glFrustum(left * ratio, right * ratio, bottom, top, nearClip,farClip)
или
glOrtho(left * ratio, right * ratio, bottom, top, nearClip,farClip)
или
gluOrtho2D(left * ratio, right * ratio, bottom, top)
(предполагая, что left, right, bottom
и top
равны и ratio=width/height
)
Если вы используете что-то вроде gluPerspective (), просто используйте соотношение ширины / высоты окна:
gluPerspective(60, (double)width/(double)height, 1, 256);