0

このコードを使用してオブジェクトが特定の位置を指すように、回転行列のヨーを設定したい

Vector3 dist = transform().position() - mPlayerTarget;
transform().rotationZ(atan2(dist.x(), dist.y()));

これは、回転が逆であることを除いて、正しい結果を生成します。そのため、ターゲット ポイントをたどるのではなく、そこから離れて回転します。

Vector3 dist = transform().position() - mPlayerTarget;
transform().rotationZ(-atan2(dist.x(), dist.y()));

(-atan2 を使用) オブジェクトはターゲットに追従しますが、右に 90 度オフセットされます。rotationZ の実装は次のようになります。

float cz = cosf(rotation);
float sz = sinf(rotation);

matrix.mMatrix[0] = cz;
matrix.mMatrix[1] = sz;
matrix.mMatrix[2] = 0;

matrix.mMatrix[3] = -sz;
matrix.mMatrix[4] = cz;
matrix.mMatrix[5] = 0;

matrix.mMatrix[6] = 0;
matrix.mMatrix[7] = 0;
matrix.mMatrix[8] = 1;

iOS OpenGL ES 2.0 を使用しています。ここで何かが根本的に間違っているようです。最初のバージョンで正しい結果が得られるはずですか? 他のすべての変換は適切に機能しているようです。ここで何が問題になる可能性がありますか?エラーを探す場所がわかりません...

4

1 に答える 1

1

まず atan2 です。通常は atan2(y, x) として定義されますが、逆の場合もあります。

問題の別の原因は、距離ベクトルの方向である可能性があります。これは、ターゲットから変換位置に向かっています。それを逆にしてみてください。

于 2013-12-25T11:15:14.513 に答える