我正在使用来自 Qt6 的新 QtQuick3D。我需要在两点之间画一条线,但没有找到专门用于此的功能。因此我决定使用一个可以缩放和旋转的基本圆柱体。缩放按预期工作,但旋转存在一些问题。
Node {
property vector3d center
property vector3d scaleCylinder
property vector3d eulerAngles
Model {
id: line
position: center
source: "#Cylinder"
scale: scaleCylinder
eulerRotation: eulerAngles
materials:
DefaultMaterial {
diffuseColor: "blue"
}
}
}
我使用 Eigen 库计算旋转,通过角度轴检索欧拉角。显示时圆柱轴在 Y 轴上。
AngleAxis angleAxis(const PointType vec) {
double angle;
VectorType axis;
PointType a = PointType({0, 1, 0});
PointType v = normalize(vec);
axis = point2vector(normalize(cross(a, v)));
angle = acos(dot(a, v));
return AngleAxis(angle, axis);
}
void setEulerAngles() {
AngleAxis rotation = angleAxis(target - entry);
VectorType angles= rotation.toRotationMatrix().eulerAngles(0, 1, 2);
eulerAngles = QVector3D(float(angles[0] * 180.0 / M_PI), float(angles[1] * 180.0 / M_PI), float(angles[2] * 180.0 / M_PI));
}
计算欧拉角时我犯错了吗?我应该使用另一种技术,比如四元数吗?也许还有一个我不知道的更简单的解决方案。