J'utilise glm :: quaternions pour faire tourner un vecteur autour d'un certain axe. Mais le vecteur inverse l'axe chaque fois qu'il est appelé.quaternion inverse le vecteur
Voici mon code pour faire tourner mon objet autour de l'axe latéral:
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);
}
chaque fois que j'appelle cette méthode, mon haut vecteur est tourné autour de l'axe, mais aussi inversé. Je peux travailler autour de cela en utilisant:
vec4 newUpVec = rot * -vec4(playerObject->getVecUp(), 1.0f);
mais cela est plus comme le traitement des symptômes au lieu de trouver la cause. Peut-être que quelqu'un ici peut m'aider à comprendre ce que le quaternion fait ici.