特定の四元数でアイテムを回転させる単純な QML コンポーネントを作成しようとしています。
OGRE クォータニオン タイプで ArUco からクォータニオンを取得し、それを QMatrix4x4 に適用します。次に、マトリックスから QTransform を取得し、それをペインターに適用してみます。残念ながら、効果はかなり異なります。
void Marker::paint(QPainter *painter)
{
QMatrix4x4 mat;
QQuaternion q = QQuaternion(0.883290,-0.128302,0.436779,-0.112081);
mat.rotate(q);
QRect rect = QRect(width()/4,height()/4,width()/2,height()/2);
painter->setTransform(mat.toTransform());
painter->fillRect(rect, Qt::red);
}
結果は次のとおりです。
そして、それは次のようになるはずです:
更新#1:問題は、向きの四元数で行列を回転させることだと思いますが、おそらくその向きを他の方法で適用する必要がありますか?クォータニオンを完全には理解していません。それが間違いであるかどうかを誰かが説明できますか?
更新#2:私はそれについてもっと読みましたが、向きは参照位置に対する回転であることがわかりました。私はそのような立場を持っていると思いますが、それをどのように適用するかはわかりません。