2

私はqglwidgetとAndroidアプリのさまざまなジェスチャを使用していますが、Quaternionsのトピックは完全に混乱しているため、ほとんど推測とチェックでした。次を使用して、1つの軸を中心に数度回転させることができました。

rotation=QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),delta.y())*rotation;

これは、x 方向の同じステートメントと同様に、望ましい結果をもたらします。

私の質問は、回転を行う正しい方法ですか? そして2つ、2つの軸で回転させたい場合は、次のようにします:

rotation=QQuaternion::fromAxisAndAngle(QVector3D(1,0,0),delta.y())*rotation;
rotation=QQuaternion::fromAxisAndAngle(QVector3D(0,1,0),delta.x())*rotation;

または、同様に機能する1行のステートメントはありますか?

4

1 に答える 1

2

はい、あなたは正しい方法でそれをやっています.1行のステートメントはありません:-)

3D アプリケーションでは、一連のオイラー角からクォータニオンを作成することは非常に一般的であり、最も基本的な回転を乗算するだけでこれを実行します。プロファイリングにより、この部分がパフォーマンスにとって重要であると判断されました)。たとえば、規則 ZXZ を使用している場合 (ここの最初の図に示されているように)、次のように記述します。

QQuaternion rotation =
    QQuaternion::fromAxisAndAngle(QVector3D(0,0,1), alpha) *
    QQuaternion::fromAxisAndAngle(QVector3D(1,0,0), beta) * 
    QQuaternion::fromAxisAndAngle(QVector3D(0,0,1), gamma);

ここでalphabetagammadouble角度を度数で表した値です (ラジアンではなく注意してください)。

注: 独自のメソッドでラップすることにより、ワンライナーを自分で作成できます。

static QQuaternion fromEuler(double alpha, double beta, double gamma);
于 2013-07-11T07:50:42.633 に答える