LINUX.ORG.RU

OpenGL изменить размер viewporta, не меняя размер нарисованного, запутался :(


0

1

Доброго времени суток, что-то я малость запутался, в таком вопросе: как сделать так, чтобы при изменении размеров viewport-а, размер нарисованной картинки не менялся?

Код стандартный:

void resize(int X,int Y,int W,int H) {
    Fl_Gl_Window::resize(X,Y,W,H);
    glLoadIdentity();
    glViewport(0,0,W,H);
    glOrtho(0,W,0,H,-1,1);
    redraw();
}

void draw() {
        // First time? init viewport, etc.
        if (!valid()) {
            valid(1);
            glLoadIdentity();
            glViewport(0,0,w(),h());
            glOrtho(0, w(),0,h(),-1,1);
        }
        // Clear screen
        glClear(GL_COLOR_BUFFER_BIT);
        // Draw white 'X'
        glColor3f(1.0, 1.0, 1.0);
        glBegin(GL_LINE_STRIP); glVertex2f(w(), h()/2); glVertex2f(-w(),-h()); glEnd();
        // хотя не так важно что рисовать, при изменении размеров viewport-а, картинка растягивается/сжимается
}

Может надо вводить какой-нибудь поправочный коэффициент, типа aspectratio(отношение сторон окна) и при отрисовке умножать на него?

★★★★★

Отношение диагоналей в качестве коэффициента

scale= sqrt(w()*w()+h()*h()) / sqrt(W*W+H*H);
...
glOrtho(0,W*scale,0,H*scale,-1,1);

W и H - фиксированный размер, а w() и h() - текущий размер. При условии, что W/H = w()/h() (640x480,800x600,1024x726,...), иначе нужно ещё поправку на aspect ratio делать (это типа домашнее задание - куда эту поправку воткнуть)

anonymous
()
Ответ на: комментарий от anonymous

Да, я понял, я же рисую по координатам границ окна, которые меняются, естественно размер изображения тоже будет меняться. Если рисовать конкретно по координатам(скажем 10,10 - 100,100), то размер не меняется :)

xterro ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.