gpt4 book ai didi

java - 滚动 3d 球的旋转

转载 作者:行者123 更新时间:2023-12-02 10:53:53 25 4
gpt4 key购买 nike

我在 3D 空间中有一个球,它具有以下属性:

location - 表示球所在位置的 Vector3frotation - 表示 x、y 和 z 轴旋转角度的 Vector3f

我想让球沿着 Vector3f“方向”表示的特定方向滚动。如何根据我希望球滚动的方向计算适当的轴旋转 vector (见上文)?

我尝试过以下方法:

  1. 将旋转.x 设置为方向.z
  2. 将旋转.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 轴时有效,但是当我沿两个轴之间的方向滚动时,旋转看起来不正确。我的假设是,这是由于旋转计算如下而引起的:

  1. 球沿X轴旋转rotation.x
  2. 然后球沿着步骤 1 创建的"new"X 轴旋转rotation.z。

有什么建议可以改变这种行为,以便每次旋转都是相互独立计算的吗?

最佳答案

除非您想实现滑动和/或后旋,否则我认为您应该稍微不同地解决这个问题。您已经有一个支持绕任意轴旋转的 Matrix.rotate()使用它

为球存储的属性

  • 位置
  • 旋转矩阵

注意:在面向矩阵的系统/场景图中,bould 通常存储在单个 4x4 变换矩阵中。这可能会也可能不会更方便,具体取决于您当前代码库的其余部分。

移动算法

  1. 给定球方向和标准向上 vector (0, 1, 0),使用以下公式计算旋转轴叉积。 (即它垂直于方向和上轴)

  2. 旋转现在只是一个matrix.rotate(rotationSpeed,rotationAxis),应用于现有的旋转矩阵。

如果允许球在表面上滚动/向下滚动,请将标准向上 vector 替换为适当的表面法线。

关于java - 滚动 3d 球的旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15457735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com