J'essaie d'apprendre à faire quelques transformations sur des points 3D dans OpenGL. En utilisant this cheat sheet je crois que j'ai la matrice correcte pour multiplier à mon vecteur que je veux faire pivoter. Cependant, quand je multiplie et imprime la nouvelle coord, je crois que c'est incorrect. (Rotating 1,0,0 90deg cc devrait aboutir à 0,1,0 correct?) Pourquoi est-ce ne fonctionne pas?Pourquoi mon vecteur ne tourne-t-il pas correctement OpenGL/GLM?
Mon code:
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans = {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, cos(glm::radians(90.0f)), -sin(glm::radians(90.0f)), 0.0f,
0.0f, sin(glm::radians(90.0f)), cos(glm::radians(90.0f)), 0,
0.0f, 0.0f, 0.0f, 1.0f
};
vec = trans * vec; //I should get 0.0, 1.0, 0.0 right?
std::cout << vec.x << ", " << vec.y << ", " << vec.z << std::endl;
Les impressions ci-dessus 1.0, 0.0, 0.0
indiquant qu'il n'y avait pas de changement du tout?
J'ai également essayé d'utiliser la fonction rotate
dans GLM pour générer ma matrice plutôt que de spécifier manuellement mais je n'ai toujours pas obtenu ce que je pense être correct (j'ai une autre mauvaise réponse).
glm::mat4 trans = glm::rotate(trans, 90.0f, glm::vec3(0.0, 0.0, 1.0)); //EDIT: my bad, should've been z axis not x, still not working
Les impressions ci-dessus: -2.14..e+08, -2.14..e+08, -2.14..e+08
(PS: Je viens de prendre la géométrie dans l'année scolaire précédente, mes excuses si le calcul est incorrect, j'ai une compréhension de base des matrices et la multiplication de matrices que je cueillis. jusqu'à aujourd'hui pour apprendre les transformations OpenGL mais d'autres que je suis un peu à ça)
Si l'entrée est (1,0,0,1) et la sortie doit être (0,1,0,1), vous devez tourner autour de l'axe Z. –
@HannesHauptmann ok, j'ai essayé de faire ce changement, mais il ne renvoie toujours pas la bonne réponse 'glm :: mat4 trans = glm :: rotate (trans, 90.0f, glm :: vec3 (0.0, 0.0, 1.0)) ; ' –
Sur le côté gauche, vous voyez comment OpenGL le gère. Je suis 100% c'est une rotation autour de l'axe Z :) –