2

を使用して、Bullet 物理エンジンから取得したヨー オイラー角を変換することは可能ですか?

btTransform trans;
trans.getBasis().getEulerYPR(rx, ry, rz);

範囲 [0 , 360] に。それ以外の場合、360 度回転の場合、オイラー角は 0->90->0-> -90 -> 0 の範囲で変化します。

しかし、私は0->90->180->270->0から欲しい

私のグラフィックス API は、0 から 360 の範囲の回転角度のみを受け入れます


ええと、0->90->0-> -90 はピッチ値でした。これが私が今使っているコードです:

trans.getBasis().getEulerYPR(yaw, pitch, roll);
y1 = (pitch >= 0) ? pitch : (PI2 + pitch);

ピッチの負の値に 180 を加算しようとしましたが、うまくいきません。オイラー角を使用してメッシュをスムーズに回転させる別の方法を見つける必要があるようです。


更新: 弾丸関数を直接使用するべきではないようです。より良いオプションは、基底行列を直接扱うことです:

btMatrix3x3 m_el = trans.getBasis();
ry = btAtan2( m_el[0].z(), m_el[0].x() );
if(ry < 0)
    ry += SIMD_PI;

これで、y 軸を中心とした回転が得られました。残りの 2 については....ふぅ!

4

1 に答える 1

0

いいえ、さまざまな角度のドメイン、または一般的なオイラー角度を読んでください。2 つはドメイン [0, 2 pi] を持ち、通常はヨーとロールを、もう 1 つの [0, pi] は通常ピッチを持ちます。

于 2012-06-23T00:06:03.473 に答える