を使用して、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 については....ふぅ!