Отсечение OpenGL

Я уже несколько часов читаю статьи о вырезании, но, похоже, не нашел решения своей проблемы.

Это мой сценарий:

В среде OpenGL ES (IOS, Android) у меня есть двухмерный граф сцены, состоящий из рисованных объектов, образующих дерево.

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

Эта установка идеально подходит для рендеринга 2D-графа сцены, прохода по дереву, рендеринга каждого объекта, а затем его потомков.

Теперь возникает моя проблема: я ищу способ включить обрезку узла. При включенном отсечении дочерние элементы узла должны быть обрезаны, когда они покидают область ограничивающей рамки родителя.

Например, я хочу иметь узел, содержащий набор текстовых узлов в качестве дочерних, которые можно прокручивать вверх и вниз в пределах ограничивающего прямоугольника его родителей, и его следует обрезать при выходе из области ограничивающего прямоугольника родителя.

Поскольку ограничивающие прямоугольники не выровнены по осям, я не могу использовать glScissor, что было бы самым простым способом.

Я думал об использовании буфера трафарета и рисования в нем заполненного ограничивающего прямоугольника при включенном отсечении и затем включении буфера трафарета. Это может сработать, но приводит к другой проблеме: что произойдет, если у дочернего элемента внутри обрезанного узла снова произойдет обрезка? - Маску-трафарет нужно настроить для ребенка, удалив маску-трафарет родителей.

Еще одно решение, о котором я думал, - это выполнение вырезки в программном обеспечении. Это было бы возможно, потому что внутри каждого узла отсечение могло быть выполнено относительно легко в его собственном локальном координатном пространстве. Обратной стороной этого решения будет то, что отсечение должно быть реализовано для каждого нового типа узла, который реализуется.

Может ли кто-нибудь указать мне правильное направление? Я ищу что-то вроде функции glscissor для обрезки прямоугольных областей, не выровненных по оси.

5
задан NULL 27 September 2011 в 13:20
поделиться