Можно ли определить «панели графиков» в OpenGL и напрямую рисовать на них вместо окна? - PullRequest
0 голосов
/ 18 марта 2012

Мне было интересно, можно ли легко реализовать следующее в OpenGL:

  1. разделить окно на несколько панелей
  2. поместите каждую панель на место, используя нормализованные координаты (0-1), чтобы при изменении размера окна панель оставалась в правильном положении
  3. рисовать непосредственно на одной из ранее определенных панелей

Результат должен выглядеть примерно так:

До сих пор я рисовал свои объекты прямо в окне, смещая координаты с соответствующим значением для каждой панели. Однако это не похоже на правильный способ делать вещи. Любые предложения и примеры кода от опытных разработчиков приветствуются!

РЕДАКТИРОВАТЬ: То, что я до сих пор читал, использование glScissor или glViewport может быть двумя способами достижения того, что я хочу, однако я не знаю, для чего нужны плюсы и минусы идти в любом направлении (ваши идеи очень приветствуются!). Кроме того, я действительно предпочел бы определить какой-то panel, вернуть его дескриптор и просто использовать его.

1 Ответ

2 голосов
/ 18 марта 2012

Если вы используете glScissor(), вы просто определяете прямоугольник отсечения (т. Е. Где рисовать).Это может быть все, что вам нужно.С glViewport() вы, по сути, вызываете glScissor() за кадром, а также меняете способ отображения координат в пространстве экрана.

Если вы хотите ограничить рисование одной из панелей (без использования локальных координат), используйтеglScissor().В противном случае используйте glViewport().

. Что касается панели, я бы, вероятно, использовал некоторый абстрактный базовый класс:

class Panel {
    // ...
    virtual void OnDraw(void) = 0;

    void Draw(void) {
        glViewport(x, y, w, h);
        OnDraw();
        glViewport(0, 0, parent_w, parent_h);
    }
}
...