固定軸を中心にオブジェクトを回転
私はアプリのユーザーに、画面上で指をドラッグして、画面の中央に描かれた3Dオブジェクトを回転させようとしています。画面上の水平方向の動きは、固定されたY軸の周りの回転を意味し、垂直方向の動きは、X軸の周りの回転を意味します。私が抱えている問題は、1つの軸の周りの回転を許可するだけでオブジェクトが正常に回転するのに、2番目の回転を導入するとすぐにオブジェクトが期待どおりに回転しないことです。 これが何が起こっているかの写真です: 青い軸は固定軸を表します。この固定された青い軸を持つ画面を描きます。これは、オブジェクトに関連して回転させたいものです。何が起こっているのかは赤です。 私が知っていることは次のとおりです。 Y(0、1、0)を中心とした最初の回転により、モデルは青いスペース(このスペースAと呼ばれる)から別のスペース(このスペースBと呼ばれる)に移動します。 ベクトル(1、0、0)を使用して再度回転しようとすると、スペースAではなくスペースBでx軸を中心に回転します。 私が知っていることを考えると、私が試したものがあります(簡潔にするためにW座標を除外します): 最初に、クォータニオンを使用してY(0、1、0)を中心に回転します。 回転Yクォータニオンをマトリックスに変換します。 Y回転行列に固定軸x Vector(1、0、0)を掛けて、新しい空間に関連するX軸を取得します。 クォータニオンを使用して、この新しいXベクトルを中心に回転します。 コードは次のとおりです。 private float[] rotationMatrix() { final float[] xAxis = {1f, 0f, 0f, 1f}; final float[] yAxis = {0f, 1f, 0f, 1f}; float[] rotationY = Quaternion.fromAxisAngle(yAxis, -angleX).toMatrix(); // multiply x axis by rotationY to put it in object space …