Применение преобразований в двумерном графе сцены
В двухмерном графе сцены: когда я выполняю преобразование, например, вращение или другое в узле, как мне применить эти операции в дочерних узлах? Если я применяю операцию у каждого ребенка, это может занять много времени. Я думал, что когда приложение рендерит сцену, в каждом узле вниз глобальное вращение добавляется с текущим вращением узла. То же самое с переводом и масштабом. Когда поднимается на графике, эти глобальные свойства вычитаются. Есть ли способ лучше?
1 ответ
Вам нужно использовать стек, в который вы нажимаете и извлекаете текущую матрицу преобразования.
def calculateTransformRecursive(self):
pushGlobalTransform();
self.calculateAndStoreGlobalTransform();
for node in self.nodes:
node.calculateTransformRecursive();
popGlobalTransform();
Таким образом, каждый узел имеет глобальное преобразование во время рисования, и нет необходимости "отменять" преобразования при переходе вверх по дереву.