偏航旋转矩阵

时间:2013-12-24 21:49:56

标签: math matrix rotation opengl-es-2.0 rotational-matrices

我想设置旋转矩阵的偏航,以便使用此代码将对象指向特定位置

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度。 rotateZ实现如下所示:

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。这里似乎有些根本错误,第一个版本应该是产生正确结果的版本?所有其他转换似乎都正常工作。这可能会出错?我不知道在哪里寻找错误......

1 个答案:

答案 0 :(得分:1)

首先是atan2 - 它通常定义为atan2(y,x),而你则反过来。

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