这个问题听起来绝对微不足道,但这行代码不会运行,因为没有为QVector3D和QMatrix定义运算符*。我看过医生了,它好像不在那里。有什么方法可以做到这一点吗?如果没有,有没有具体的原因?
QVector3D r_new = QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r, n), 45).toRotationMatrix() * r;发布于 2020-11-08 06:29:53
阅读一些文档后,运算符*似乎是在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();显然有更传统的方式来编写它,但我现在将坚持使用它。
发布于 2021-01-21 17:21:29
由于您只想将旋转应用于3D矢量,因此看起来您可以直接使用QQuaternion::rotatedVector方法- https://doc.qt.io/qt-5/qquaternion.html#rotatedVector执行此操作
QQuaternion R = QQuaternion::fromAxisAndAngle(QVector3D::crossProduct(r, n), 45);
QVector3D r_new = R.rotatedVector(r);https://stackoverflow.com/questions/64731057
复制相似问题