Научите как в Monkey пользоваться матричным преобразованием

  1. 4 г. назад

    Научите, кто знает, как использовать все это хозяйство в виде GetMatrix, SetMatrix, PopMatrix, PushMatrix и Transform — последовательность выполнения данных команд и вообще суть. Если можно в виде примера покажите как повернуть объект относительно заданной точки.

  2. 4 г. назад исправил devolonter

    Повернуть объект относительно точки:

    PushMatrix()
    Translate(x, y) ' положение в пространстве
    Rotate(angle) ' в градусах
    Translate(x2, y2) ' например, для вращения относительно центра: x2 = -width/2, y2 = -height/2 
    DrawImage(image, 0, 0)
    PopMatrix()
  3. devolonter

    6 Jun 2014 Администратор

    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 советую ознакомиться с ним.

или зарегистрируйтесь чтобы комментировать!