ヤカンを眺めるにあたって、上、下、左、右の4つの回転オペレーションをサポートしたい。
今回はオイラー角で作って失敗の例をもう少し詳しく。
// 以下のコードは意味を表したもの
class Yakan
{
float ex;
float ey;
};
// 毎アプリループに値は累積
operation()
{
const float32 C=一定の値;
switch(OPE){
case 上: ex -= C; break;
case 下: ex += C; break;
case 左: ey -= C; break;
case 右: ey += C; break;
}
}
// 毎回 オイラー角 ex ey で表示
draw()
{
// まっすぐ正面のヤカン
// * は行列の演算
MATRIX mat = Get正面mat() * rotate_x(ex) * rotate_y(ey);
drawobj(ヤカン,mat);
}
上記のようなコードを書いた場合、exのみや、eyのみ動かした場合だけ、思った動きになる。両方を動かしたときには、NG。
例えば、ey=180; に固定、ex=いろんな値をとってみる。ヤカンは上下のオペレーションとは逆方向に回転する。
続く。
訂正20081015:
上下⇔ey 左右⇔ey という対応づけだったものを
上下⇔ex 左右⇔ex という対応づけに変更した。