2011-07-07 14 views
0

私はOpenGL ES 2.0アプリケーションを作成しています。私はタッチコントロールを実装して、画面上でジェスチャー(スワイプのような)をしながら3Dオブジェクトを回転させることができます。スワイプジェスチャーから3-Dオブジェクトの回転角度を決定するにはどうすればよいですか?

私は、カメラを回転させてオブジェクトを回転させる機能を持っています。私の問題は、XとYのどの回転角を回転関数に渡さなければならないかを知る必要があることです。

ユーザーが特定の方向にスワイプを実行する場合、回転機能に渡すことができるように、X方向とY方向の角度を計算するにはどうすればよいですか?

+0

下矢印のツールヒントを読むと、誰かがそれを投票した理由がわかります。それはあなたの評判を反映するのではなく、あなたの質問をする上での研究と努力の質に関するフィードバックです。 – Spacemancraig

+0

ああ!情報をありがとう。私はその質問をより明確にすべきだった。とにかく、下記の答えが私を助けてくれました。私は今からもっと具体的な詳細を投稿するようにします。 – Bharath

+1

おそらくあなたがこれを見るのが少し遅れていますが、下の答えが助けになった場合は、その答えを「受け入れる」をクリックしてください。 – Spacemancraig

答えて

2

3次元オブジェクトの回転にタッチ移動を変換する作業には、トラックボールを設定するか、縮尺変更されたピクセル変位を使用して回転にマッピングすることができます。

後者はthis OpenGL ES 2.0 sample applicationです。ここでは、XとYの指の移動に応じて立方体の回転を行います。この場合、タッチポイントの座標差を使用してコードを使用して回転に直接マッピングします次のように:

GLfloat totalRotation = sqrt(xRotation*xRotation + yRotation*yRotation); 

    CATransform3D temporaryMatrix = CATransform3DRotate(currentCalculatedMatrix, totalRotation * M_PI/180.0, 
                 ((xRotation/totalRotation) * currentCalculatedMatrix.m12 + (yRotation/totalRotation) * currentCalculatedMatrix.m11), 
                 ((xRotation/totalRotation) * currentCalculatedMatrix.m22 + (yRotation/totalRotation) * currentCalculatedMatrix.m21), 
                 ((xRotation/totalRotation) * currentCalculatedMatrix.m32 + (yRotation/totalRotation) * currentCalculatedMatrix.m31)); 

これは大体私のニーズのために働くように見えた1度、として画面上の1点の移動を扱います。これを上下にスケールして、回転の感度を調整することができます。

ここで使用しているCATransform3Dは、ヘルパー関数を使用してOpenGLモデルのビュー行列に変換され、シェーダに行列の一様として渡されます。

この回転を扱うもう1つの方法はトラックボールで、Core Durationのサンプルはhereです。あなたは彼のトラックボールの実装を持ち上げることができ、私はそのコードから適切なモデルビューマトリックスを生成するために私のアプリケーションで行うのと同じCATransform3D変換を行います。

関連する問題