我在 3D 空间中有一个 Ball,它具有以下属性:
location - 表示球旋转位置的 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 轴时有效,但是当我在两个轴之间的方向滚动时,旋转看起来不正确。我的假设是,这是由于旋转计算如下:
- 球通过rotation.x 沿X 轴旋转
- 然后球沿第 1 步创建的“新”X 轴旋转。
有什么建议可以改变这种行为,以便每次旋转都相互独立计算?