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),而你有它相反的方式。

另一个问题来源可能是您的 dist 向量的方向 - 它从目标到变换位置。尝试扭转它。

于 2013-12-25T11:15:14.513 回答