Qt6 の新しい QtQuick3D を使用しています。2 点間に線を引く必要がありますが、これ専用の関数が見つかりませんでした。そのため、スケーリングと回転が可能な基本的な円柱を使用することにしました。スケーリングは意図したとおりに機能しますが、回転にはいくつかの問題があります。
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));
}
オイラー角の計算を間違えましたか? 四元数など、別の手法を使用する必要がありますか? 私が知らないもっと簡単な解決策があるかもしれません。