OpenGL отсечение

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

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

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

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

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

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

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

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

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

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

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

Ответы на вопрос(1)

Ваш ответ на вопрос