次の属性を持つ3D空間のボールがあります。
場所-ボールが回転している場所を表すVector3f-x、y、z軸の回転角を表すVector3f
Vector3fの「方向」で示される特定の方向にボールを転がしたい。ボールを転がしたい方向に基づいて、適切な軸回転ベクトル(上記を参照)をどのように計算しますか?
私は次のことを試しました:
- rotation.xをdirection.zに設定します
- rotation.zをdirection.xに設定します
ボールの変換行列を次のように計算します。
private Matrix4f calculateEntityMatrix(EEntity entity)
{
Matrix4f matrix = new Matrix4f();
matrix.translate(new Vector3f(entity.getXLocation(), entity.getYLocation(), entity.getZLocation()));
if(entity.getXRotation()>0)
{
matrix = matrix.rotate(entity.getXRotation(), new Vector3f(1f, 0f, 0f));
}
if(entity.getYRotation()>0)
{
matrix = matrix.rotate(entity.getYRotation(), new Vector3f(0f, 1f, 0f));
}
if(entity.getZRotation()>0)
{
matrix = matrix.rotate(entity.getZRotation(), new Vector3f(0f, 0f, 1f));
}
if(entity.getXScale()!=1 || entity.getYScale()!=1 || entity.getZScale()!=1)
{
matrix = matrix.scale(new Vector3f(entity.getXScale(), entity.getYScale(), entity.getZScale()));
}
return matrix;
}
これは、x軸またはz軸のいずれかをロールダウンするときに機能しますが、2つの軸の間の方向にロールダウンすると、回転が正しく表示されません。私の仮定は、これは回転が次のように計算されているという事実によって引き起こされていると思います。
- ボールはX軸に沿ってrotation.xによって回転します
- 次に、ボールは、ステップ1で作成された「新しい」X軸に沿ってrotation.zによって回転します。
各回転が互いに独立して計算されるように、この動作をどのように変更できるかについての提案はありますか?