Ho bisogno di manipolare elementi QML tramite QMatrix4x4, al fine di applicare alcune trasformazioni prospettiche. Fondamentalmente, ho definito la classe Transform utilizzare un QMatrix4x4 oggetto come argomento per il campo trasformare del QML articoloMatrice di trasformazione Qt
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;
};
dove
void Transform::applyTo(QMatrix4x4 *matrix) const {
*matrix *= m_matrix;
matrix->optimize();
}
Tuttavia, sembra che QML non "definisce" la matrice prospettica nel modo classico. Ho focalizzato i miei test principalmente sulle rotazioni (http://en.wikipedia.org/wiki/Rotation_matrix). Diciamo che ho un QML elemento in x: 200, y: 200 e applico la trasformazione
transform: [Transform{matrix:mytra},Rotation { axis { x: 1; y: 0; z: 0 } angle: 90 } ]
dove mytra è la matrice identità. Il metodo applyTo() riceve il (rotazione) a matrice
1 -0.195312 0 200
0 -0.195312 0 200
0 0 1 0
0 -0.000976562 0 1
ma il "classico" uno dovrebbe essere
1 0 0 200
0 0 -1 200
0 1 0 0
0 0 0 1
non capisco dove questa matrice proviene e come adattare la mia matrice qt. Grazie per l'aiuto.
Grazie ... tuttavia non capisco qual è il punto della matrice 4x4. Gestisce la coordinata z? – lorenzolightsgdwarf
Sì. Una matrice 3x3 può tenere traccia delle rotazioni in xey e le traduzioni (pos) e la scala in xey. Una matrice 4x4 può tenere traccia delle rotazioni di x, yez, della scala e della traduzione (ovvero pos o posizione). La robotica sfrutta molto le matrici 4x4. Il rendering 3D sulle schede grafiche utilizza anche le matrici 4x4. Se si guarda in OpenGL, lo usa dappertutto. – phyatt
Come si traduce un rettangolo QML lungo l'asse Z? – trusktr