我在3D空间中有一个球,具有以下属性:
位置 - 代表球的Vector3f 旋转 - 代表x、y和z轴旋转角度的Vector3f
我想让球按照指定的方向滚动,该方向由Vector3f“direction”表示。如何根据我希望球往哪个方向滚动来计算适当的轴旋转向量(见上文)?
我已经尝试了以下方法:
- 将旋转.x设为方向.z
- 将旋转.z设为方向.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轴滚动时有效,但当我朝两个轴之间的方向滚动时,旋转似乎不正确。我的假设是这是由于旋转计算如下所示引起的:
- 球体沿X轴旋转rotation.x
- 球体沿步骤1创建的“新”X轴旋转rotation.z。