1

我正在尝试使用 lwjgl Matrix4f类旋转顶点。我试过这段代码:

    float rotY = (float) Math.toRadians(180);

    Matrix4f transMat = new Matrix4f();
    transMat.rotate(rotY, new Vector3f(0.0f, 1.0f, 0.0f));
    transMat.translate(new Vector3f(1.0f, 0.0f, 0.0f));

    Vector4f vecPosMod = new Vector4f(1.0f, 0.0f, 0.0f, 1.0f);
    Matrix4f.transform(transMat, vecPosMod, vecPosMod);

它应该将 a 旋转Vector3f(1.0f, 0.0f, 0.0f)180 度,但不幸的是,经过所有计算 vecPosMod 是(-2.0, 0.0, 1.7484555E-7, 1.0). 我希望它是(-1.0, 0.0, 0.0, 1.0)。如何?

4

1 回答 1

1

您在旋转后沿 X 轴对矩阵应用平移。这是在执行旋转后将位置沿 X 轴平移一个单位,导致 -2.0 而不是 -1.0。

尝试这个:

  float rotY = (float) Math.toRadians(180);

  Matrix4f transMat = new Matrix4f();
  transMat.rotate(rotY, new Vector3f(0.0f, 1.0f, 0.0f));

  Vector4f vecPosMod = new Vector4f(1.0f, 0.0f, 0.0f, 1.0f);
  Matrix4f.transform(transMat, vecPosMod, vecPosMod);

它给出以下结果:

(-1.0 0.0 8.742278E-8 1.0)

在 java 中应用带有浮点数的旋转变换后,8.742278E-8 可能接近 0.0。

于 2012-07-20T04:27:17.153 回答