1

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);

180度回転するはずVector3f(1.0f, 0.0f, 0.0f)ですが、残念ながら、すべての計算の結果、vecPosModは(-2.0, 0.0, 1.7484555E-7, 1.0)です。になりたいです(-1.0, 0.0, 0.0, 1.0)。どのように?

4

1 に答える 1

1

回転後、X軸に沿った平行移動をマトリックスに適用します。これは、回転が実行された後、X軸に沿って位置を1単位変換し、-1.0ではなく-2.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)

8.742278E-8は、Javaでfloatを使用して回転変換を適用した後、おそらく0.0に近い値になります。

于 2012-07-20T04:27:17.153 に答える