0

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));
}

オイラー角の計算を間違えましたか? 四元数など、別の手法を使用する必要がありますか? 私が知らないもっと簡単な解決策があるかもしれません。

4

0 に答える 0