中心を中心に自由に回転する球体に向けられたカメラを想像してみてください。
ユーザーがカメラから手を伸ばしてこの球体の最も近い点に触れ、フリックすることで、この球体を回転させることができると想像してください。
これは私がiOSに実装しようとしているものです。
Iphone での OpenGl ES - 3D オブジェクトの表示と回転<-- このリンクされた質問では、適切なフレームワークを見つけようとしています。
それ以来、私はhttp://nineveh.gl/を選択し(まだベータ版ですが、少し微調整するだけで問題なく動作します)、その回転デモが機能するようになりました。
ユーザーの指がタッチスクリーン上を移動するたびに、コードはその瞬時ベクトルをキャッチし、更新ごとに全体の速度ベクトルに投入されます (@ 60 Hz):
- (void) drawView
{
static CGPoint v = { 0.0, 0.0 };
v.x += _vel.x;
v.y += _vel.y;
// resetting to 0 makes sure each touch movement only gets fed in once
_vel.x = _vel.y = 0.0;
float decay = 0.93;
v.x *= decay;
v.y *= decay;
// this is wrong...
[_mesh rotateRelativeToX: v.y
toY: v.x
toZ: 0.0 ];
[_camera drawCamera];
}
次に、この合力をメッシュに適用する必要があります。
私が上に持っているものは、最初はうまくいくようです。水平にスワイプすると、完全に機能します。同様に垂直に。しかし、回転が同期しなくなるのは、回転を組み合わせ始めたときだけです。たとえば、水平方向に 10°回転してから、垂直方向に 10°回転するとします。現在、適切に応答していません。
誰でも問題を解明できますか?
読んだところ、解決策には四元数が含まれると思われます...
誰かがこれを解決する方法を提案できますか? これは、私がプレイしなければならない API リファレンスです: http://nineveh.gl/docs/Classes/NGLObject3D.html
便利なrotationSpaceプロパティと、rotateRelativeWithQuaternionメソッドがあることに気付きました。
この問題に精通していて、この API を使用して問題を解決する方法を理解できる誰かがそこにいることを願っています。