1

私は現在、OpenGL-ES を使用して Android 用の 3D モデル ビューアーに取り組んでいます。与えられたジェスチャーに応じて回転効果を作成したい。x 軸、y 軸、または z 軸だけで回転するなど、1 軸回転を行う方法を知っています。しかし、私の問題は、3つすべてを組み合わせて、タッチジェスチャに応じてどの軸を回転させたいかをアプリに知らせる方法がわからないことです。私が念頭に置いているジェスチャーは次のとおりです。

  • X 軸を上下にスワイプ
  • Y 軸を左右にスワイプ
  • z軸の円を描くようにスワイプ

これどうやってするの?

編集: 3種類のスワイプが瞬間を非常に醜くする可能性があることがわかりました. したがって、私がしたことは、z 軸の動きを削除することでした。その条件を取り除いた後、他の 2 つは同じアルゴリズムと連携して非常にうまく機能することがわかりました。

4

2 に答える 2

2

http://developer.android.com/resources/articles/gestures.htmlには、「ジェスチャー ライブラリ」の構築に関する情報があります。自分で調べたわけではありませんが、探しているものに合っているようです

または、 gestureworks.comのようなものを試してください(繰り返しますが、自分で試したことはありません)。

ズームインとズームアウトにはプログレスバー ビューを使用します。次に、GLSurfaceView の x 方向の動きを使用して y 軸を中心に回転し、y 方向の動きを使用して x 軸を中心に回転します。

ジェスチャの問題は、アプリがユーザーが使用したジェスチャを判断しようとするため、応答がすぐに得られないことです。次に、ユーザーが指をどれだけ動かしたかを使用して回転/ズームの量を決定すると、すぐにフィードバックが得られないため、ユーザーが回転/ズームの量を制御する方法を習得するのに時間がかかります。ジェスチャごとに設定された量だけ回転/ズームしていればうまくいくと思います

于 2011-12-02T20:57:08.493 に答える
1

あなたがやろうとしていることは、あなたが知っているよりも数学が集中しているように思えます. これを数学的に行う方法は 2 つあります。(1) クォータニオンを使用する (2) 基本的な線形代数を使用する (ただし、注意しないとジンバル ロックが発生します..しかし、回転しているだけなので、これは問題ではありません)..簡単なので、2 番目のルートに進みましょう。 .. あなたがする必要があるのは、ジェスチャー実装を介してスワイプの開始点と終了点を受け取り、それらの 2 つの点が得られたら.. それが作成する線を計算することです。その線があれば、高校の数学でその線に垂直なベクトルを簡単に見つけることができます。これが、回転行列の回転軸になります。

    //Rotate around the axis based on the rotation matrix (rotation, x, y, z)
    gl.glRotatef(rot, 1.0f, 1.0f, 0.0f);

2D タブレットでは Z 平面で回転できないため、Z 回転は必要ありません。1.0f、1.0f は、ベクトルの x、y を表す変数である必要がある値です。(rot) は、2 点間の距離の大きさとして機能する必要があります。

しばらくこれを行っていないので、さらに精度が必要な場合はお知らせください。

于 2012-06-06T18:12:45.130 に答える