В OpenGL, как я могу корректироваться для изменяемого окна?

Я тяну несколько форм (таких как круги), которые выключаются высоты окна и ширины. Так как окно всегда запускается в данном размере, они привлечены правильно, но когда окно изменено, это портит соотношение сторон.

Как я могу потянуть формы правильно, независимо от размера окна?

11
задан plasmacel 25 February 2019 в 21:05
поделиться

2 ответа

Вы определенно не хотите, чтобы размер ваших объектов явно зависел от размера окна.

Как уже было предложено genpfault, корректируйте матрицу проекции при каждом изменении размера окна.

Что нужно делать при изменении размера окна:

  1. Настроить видовой экран

    glViewport(0, 0, width, height)
    
  2. Настроить прямоугольник ножниц (только если у вас включен GL_SCISSOR_TEST)

    glScissor(0, 0, width, height)
    
  3. Настройка матрицы проекции

    В случае устаревшего (конвейер фиксированных функций) 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)

15
ответ дан 3 December 2019 в 05:11
поделиться

Если вы используете что-то вроде gluPerspective (), просто используйте соотношение ширины / высоты окна:

gluPerspective(60, (double)width/(double)height, 1, 256);
5
ответ дан 3 December 2019 в 05:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: