Ортографическая проекция OpenGL - PullRequest
0 голосов
/ 28 июля 2011

Предполагается, что я использую Orhographic Projection, и у меня есть функция изменения формы, подобная этой:

void reshape(f32 width, f32 height){
    aspect = width/height;
    glViewport(0, 0, width, height);
    // guaranted 960x640 HUD canvas
    if(640*aspect>=960){
        ortho.x = 640*aspect;
        ortho.y = 640;
    }else{
        ortho.x = 960;
        ortho.y = 960/aspect;
    }
    glOrtho(0, ortho.x, ortho.y, 0, -1.0f, 1.0f);
}

Как я могу убедиться, что все вершины> ortho.x или> ortho.y (обычно за кадром) не прорисованы? Потому что, если я масштабирую окна до чего-то с большим соотношением сторон, чем 1,5f (960/640), я вижу объекты, которые не должны быть полностью видимыми (потому что область просмотра такая большая, как окно). Есть ли что-то похожее на область отсечения в ортографической проекции?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

То, что вы хотите, это использовать [glScissor][1], чтобы гарантировать, что отображаемая область никогда не выходит за пределы определенного размера.glScissor принимает прямоугольник в координатах окна (помните: координаты окна имеют начало слева внизу).Тест ножниц предотвращает образование фрагментов за пределами этой области.

Чтобы активировать тест ножниц, вы должны использовать glEnable(GL_SCISSOR).Если вы этого не сделаете, вышеприведенный вызов на самом деле ничего не сделает.

1 голос
/ 28 июля 2011

Используйте постоянные значения для предельных параметров glOrtho, но используйте glViewport и glScissor (включите с помощью glEnable(GL_SCISSOR_TEST)), чтобы ограничить визуализацию частью вашего окна.

Кстати: вы должны установить проекцию и видовой экран в функции рендеринга.Делать это в обработчике изменения формы не имеет особого смысла.В любом серьезном приложении OpenGL вы будете переключать режимы проецирования несколько раз во время полного рендеринга, так что просто сделайте это с самого начала.

...