我正在使用 glm::quaternions 围绕某个轴旋转矢量。但是向量在每次调用时都会反转轴。
这是我围绕侧轴旋转对象的代码:
void PlayerController::rotateForward(float angle) {
angle = (angle*M_PI) / 180.0f;
fquat rot = fquat(angle, playerObject->getVecSide());
normalize(rot);
vec4 newUpVec = rot * vec4(playerObject->getVecUp(), 1.0f);
normalize(newUpVec);
vec3 upVec3 = normalize(vec3(newUpVec.x ,newUpVec.y, newUpVec.z));
playerObject->setVecUp(upVec3);
playerObject->setVecForward(-normalize(cross(playerObject->getVecUp(), playerObject->getVecSide())));
vec3 newPlayerPos = currentPlanet->getPosition() + (playerObject->getVecUp() * radius);
playerObject->setPosition(newPlayerPos);
}
每次调用此方法时,我的向上向量都会绕轴旋转,但也会反转。我可以通过使用来解决这个问题:
vec4 newUpVec = rot * -vec4(playerObject->getVecUp(), 1.0f);
但这更像是治标不治本。也许这里有人可以帮助我理解四元数在这里的作用。