使用变换矩阵旋转顶点

时间:2012-07-19 21:02:55

标签: java lwjgl

我正在尝试使用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);

它应该将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)。怎么样?

1 个答案:

答案 0 :(得分: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。