平面の視点の回転だけなら三角関数のsinとcosを使えば簡単に行えるのですが、それを単純に球体の上をなぞらせようとすると上手く行かず結構はまってしまいました。
最初は単純にXZ平面上の回転なので画面のスライドさせたX成分を加算させて上手く行ったのですが、これをYZ面上に展開させた瞬間上手く動かず四苦八苦。
平面の移動を単純にYZ面上に展開させるだけでいいはずなのに。
行列変換やらなにやらちゃんとやらないとダメなのかな?とかすかな記憶しかないので基本的なところから復習したいところですが、手元に高校の頃の教科書なんて無いのでサクッと検索して見つけました。
座標回転公式と球面三角法
正直助かりました、軸がOpenGLと違っていますが基本的にはそのまま使えます。が…なぜか上手く行かない。
上下に動かしている時にどうも途中で逆行したりひっくり返ったりするタイミングがあり、原因がわからず、基礎的なところからということで単純にYZ面上だけの移動で試してみることに。
たったこれだけなのに確実に進行方向が逆転したり回転したりするのがはっきりわかりました。
ようやくここで気がつきました。カメラが天地逆さまの状態にはならないということに。
なるほどね、ということで上下の動きを念のために±89度までの制限をつけることにしました。
ようやく動きが落ち着いた感じです。まだタッチの追従があまいですけどやりたいことはできました。
0 件のコメント:
コメントを投稿