问题描述
这个问题听起来绝对是微不足道的,但是由于没有为QVector3D和QMatrix定义运算符*,因此这一行代码无法运行。我看过文档,但似乎不存在。有什么办法吗?如果否,是否有特定原因?
QVector3D r_new = QQuaternion::fromAxisAndAngle(QVector3D::crossproduct(r,n),45).toRotationMatrix() * r;
解决方法
阅读一些文档后,似乎在QVector4D和QMatrix4x4之间定义了运算符*。所以我改用QVector4D并得到类似的东西:
Qt3DCore::QTransform transform;
transform.setRotation(QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r,n),-30));
QVector4D r_to_4D = QVector4D(r,1.0);
r_to_4D = transform.matrix() * r_to_4D;
QVector3D r_new = r_to_4D.toVector3D().normalized();
显然有更好的书写方式,但我现在会坚持使用。
,由于您只想对 3D 矢量应用旋转,看起来您可以直接使用 QQuaternion::rotatedVector 方法 - https://doc.qt.io/qt-5/qquaternion.html#rotatedVector
QQuaternion R = QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r,45);
QVector3D r_new = R.rotatedVector(r);