Я уже несколько часов читаю статьи о стрижке, но, похоже, не могу найти решение своей проблемы.
Это мой сценарий:
В среде OpenGL ES (IOS, Android) У меня есть двухмерный граф сцены, состоящий из прорисовываемых объектов, образующих дерево.
Каждый узел дерева имеет свою собственную пространственную комнату со своей матрицей преобразования, и каждый узел наследует свое координатное пространство своим дочерним элементам.Каждый узел имеет прямоугольную ограничивающую рамку, но эти ограничивающие рамки не выровнены по оси.
Эта установка прекрасно работает для рендеринга 2D-графа сцены, итерации по дереву, рендеринга каждого объекта, а затем его дочерних элементов.
Теперь возникает моя проблема: я ищу способ включить отсечение на узле.С включенным отсечением дочерние элементы узла должны обрезаться при выходе из области ограничивающего прямоугольника родителя.
Например, я хочу иметь узел, содержащий набор текстовых узлов в качестве дочерних элементов, которые можно прокручивать вверх и вниз с помощью родительского ограничивающего прямоугольника, и его следует обрезать при выходе из области ограничивающего прямоугольника родителя.
Поскольку ограничивающие рамки не выровнены по оси, я не могу использовать glScissor, что было бы самым простым способом.
Я думал об использовании буфера трафарета и рисовал в нем заполненный ограничивающий прямоугольник, когдаотсечение включено, а затем включите буфер трафарета.Это может сработать, но приводит к другой проблеме: что произойдет, если у дочернего элемента в отсеченном узле снова будет отсечение?- Маска трафарета должна быть настроена для ребенка, стирая маску трафарета родителей.
Другое решение, о котором я думал, - это вырезать в программном обеспечении.Это было бы возможно, потому что в каждом узле отсечение можно было бы сделать относительно легко в его собственном локальном координатном пространстве.Обратный откат этого решения заключается в том, что для каждого нового типа узла, который реализуется, должно быть реализовано отсечение.
Может ли кто-нибудь здесь указать мне правильное направление?То, что я ищу, это что-то вроде функциональности glscissor для обрезки прямоугольных областей без выравнивания по оси.