PushMatrix и PopMatrix позволяют работать со стэком матриц преобразований. С помощью данного стэка вы можете гибко управлять преобразованиями, делать групповые, вложенные трансформации, а также возвращаться к исходному состоянию по завершению определенных преобразований. Последовательность при этом следующая:
'начало преобразований. Все изменения применяются к основной матрице
'Scale, Rotate, etc
'Draw
PushMatrix() 'начало новых вложенных преобразований.
'Scale, Rotate, etc
'Draw
PushMatrix() 'вложенная матрица. Преобразования будут применяться с учетом всех внешних матриц. Максимальная глубина вложенности - 32
'Scale, Rotate и т.д.
'Draw
PopMatrix() 'возвращаемся к предыдущей матрице
'Scale, Rotate и т.д.
'Draw
PopMatrix() 'завершение преобразований. Возврат к основной матрице
Для работы непосредственно с матрицей используются функции:
— Transfrom — перемножает заданную матрицу с текущей. Используется такими функциями, как Translate, Scale и Rotate. Может быть использована в качестве альтернативы последовательному вызову Translate, Scale и т.д. или при сложных преобразованиях.
— SetMatrx — устанавливает текущую матрицу. Данная функция более низкоуровневая и используется такими функциями, как Transfrom и PopMatrix, поэтому напрямую применяется только в редких случаях.
— GetMatrix — позволяет получить текущую матрицу преобразований. Обычно используется совместно с SetMatrx
Пример вращения изображения выше уже дали, но хотел бы упомянуть, что для определения центра преобразований у изображений есть метод SetHandle. Он позволяет определить точку, относительно которой будет выполняться трансформация.
Также, очень хороший пример по матрицам есть в стандартной папке с примерами — bananas/hitoro/matrixrocks/matrixrocks.monkey советую ознакомиться с ним.