相关疑难解决方法(0)

Qt变换矩阵

我需要通过QMatrix4x4操作QML项目,以便应用一些透视变换.基本上,我将类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;

};
Run Code Online (Sandbox Code Playgroud)

哪里

void Transform::applyTo(QMatrix4x4 *matrix) const {
      *matrix *= m_matrix;
       matrix->optimize();
}
Run Code Online (Sandbox Code Playgroud)

然而,似乎QML没有以经典方式"定义"透视矩阵.我把我的测试主要集中在旋转上(http://en.wikipedia.org/wiki/Rotation_matrix).假设我在x:200,y:200中有一个QML项目,我应用了变换

transform: [Transform{matrix:mytra},Rotation {  axis { x: 1; y: 0; z: 0 } angle: 90 } ]
Run Code Online (Sandbox Code Playgroud)

其中mytra是单位矩阵.方法applyTo()接收(旋转)矩阵

     1    -0.195312         0       200         
     0    -0.195312         0       200         
     0            0 …
Run Code Online (Sandbox Code Playgroud)

3d qt qml qt-quick

8
推荐指数
1
解决办法
4924
查看次数

标签 统计

3d ×1

qml ×1

qt ×1

qt-quick ×1