有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

利用变换矩阵旋转顶点

我正在尝试使用lwjglMatrix4f类旋转顶点。我尝试了以下代码:

    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) 个答案

  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