4

特定の四元数でアイテムを回転させる単純な 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:私はそれについてもっと読みましたが、向きは参照位置に対する回転であることがわかりました。私はそのような立場を持っていると思いますが、それをどのように適用するかはわかりません。

4

1 に答える 1