Матрица Qt Transform
Мне нужно манипулировать элементами QML через QMatrix4x4, чтобы применить некоторые перспективные преобразования. По сути, я определил класс Transform для использования объекта QMatrix4x4 в качестве аргумента для поля преобразования элемента QML.
class Transform : public QQuickTransform{
Q_OBJECT
Q_PROPERTY(QMatrix4x4 matrix READ matrix WRITE setMatrix NOTIFY matrixChanged)
public:
explicit Transform(QQuickItem *parent = 0);
QMatrix4x4 matrix() const;
void setMatrix(QMatrix4x4 matrix);
virtual void applyTo(QMatrix4x4 *matrix) const;
signals:
void matrixChanged();
private:
QMatrix4x4 m_matrix;
};
где
void Transform::applyTo(QMatrix4x4 *matrix) const {
*matrix *= m_matrix;
matrix->optimize();
}
Однако, похоже, что QML не «определяет» матрицу перспективы классическим способом. Я сосредоточил свои тесты в основном на вращениях (http://en.wikipedia.org/wiki/Rotation_matrix). Допустим, у меня есть элемент QML в x: 200, y: 200, и я применяю преобразование
transform: [Transform{matrix:mytra},Rotation { axis { x: 1; y: 0; z: 0 } angle: 90 } ]
где mytra - это единичная матрица. Метод applyTo () получает матрицу (вращения)
1 -0.195312 0 200
0 -0.195312 0 200
0 0 1 0
0 -0.000976562 0 1
но "классический" должен быть
1 0 0 200
0 0 -1 200
0 1 0 0
0 0 0 1
Я не понимаю, откуда эта матрица и как адаптировать мою матрицу к qt. Спасибо за помощь.