glm traduire matrice de ne pas traduire le vecteur
J'ai traversé quelques très simple d'erreur tout a commencé à l'aide de glm (dans VS2010). J'ai eu ce court code:
glm::mat4 translate = glm::translate(glm::mat4(1.f), glm::vec3(2.f, 0.f, 0.f));
glm::vec4 vector(1.f,1.f,1.f,0.f);
glm::vec4 transformedVector = translate * vector;
Le résultat de la transformedVector est la même que sa valeur d'origine (1.f, 1.f, 1.f, 0.f). Je ne sais pas ce que je suis en manque ici.
J'ai essayé de la matrice de rotation et qui fonctionne très bien, le point est transformated correctement.
glm::mat4 rotate = glm::rotate(glm::mat4(1.f), 90.f, glm::vec3(0.f, 0.f, 1.f));
glm::vec4 vector(1.f, 1.f, 1.f, 0.f);
glm::vec4 transformedVector = rotate * vector;
Ok, j'ai trouvé le problème. Je voudrais traduire un sommet pas un vecteur, dans ce cas, j'ai dû mettre le w de la valeur à 1.
OriginalL'auteur user2661133 | 2013-08-07
Vous devez vous connecter pour publier un commentaire.
Vous êtes d'oublier les coordonnées projectives. Ainsi, la dernière composante de
doit être de 1. Ainsi, la correction est tout simplement cela:
Cela est dû à la façon projective coordonne le travail, essentiellement à obtenir à partir des coordonnées projectives (vec4) à la normale coordonnées (vec3) vous divisez par w composant. (Vous ne pouvez pas le faire si c'est le zéro.)
La raison pour laquelle il travaille pour les rotations, mais pas des traductions est parce que dans projectif de l'espace des rotations sont "les mêmes" que dans l'espace, mais les traductions sont différentes.
J'ai juste remarqué que vous avez travaillé votre erreur, mais j'ai pensé qu'une explication peut aider.
OriginalL'auteur David