glm faire pivoter l'utilisation de Opengl
Je suis rendu un cône, et je voudrais le faire pivoter de 90 degrés dans le sens anti horaire, de sorte que le bout pointu face à l'ouest! Je suis en utilisant OpenGL 3+.
Voici mon code dans mon Cone.cpp jusqu'à présent:
//PROJECTION
glm::mat4 Projection = glm::perspective(45.0f, 1.0f, 0.1f, 100.0f);
//VIEW
glm::mat4 View = glm::mat4(1.);
View = glm::translate(View, glm::vec3(2.0f,4.0f, -25.0f));
//MODEL
glm::mat4 Model = glm::mat4(1.0);
//Scale by factor 0.5
Model = glm::scale(glm::mat4(1.0f),glm::vec3(0.5f));
glm::mat4 MVP = Projection * View * Model;
glUniformMatrix4fv(glGetUniformLocation(shaderprogram_spaceship, "MVP_matrix"), 1, GL_FALSE, glm::value_ptr(MVP));
glClearColor(0.0, 0.0, 0.0, 1.0);
glDrawArrays(GL_LINE_STRIP, start_cone, end_cone );
Pas tout le code est affiché.
Quelqu'un peut-il me guider à travers la rotation? Je dois multiplier la matrice de Vue de droite ? avec "glm rotation" de la fonction ?
Quel est le problème? Vous devez nous dire quel est le problème. Ce n'est pas juste non seulement voulons-nous de vous dire la solution, mais à vouloir en savoir le problème.
OriginalL'auteur Test Test | 2012-01-13
Vous devez vous connecter pour publier un commentaire.
Vous devez multiplier votre Modèle de matrice. Parce que c'est là le modèle de position, d'échelle et de rotation devrait être (c'est pourquoi il est appelé le modèle de la matrice).
Tout ce que vous devez faire est de (voir ici)
Qui prend le Modèle de la matrice et s'applique de rotation au-dessus de toutes les opérations qui sont déjà là. Les autres fonctions de traduire et d'échelle, de faire de même. De cette façon, il est possible de combiner de nombreuses transformations dans une seule matrice.
remarque: versions antérieures accepté angles en degrés. Elle est obsolète depuis 0.9.6
glm::radians(90.0f)
OriginalL'auteur the swine
GLM a bon exemple de rotation : http://glm.g-truc.net/code.html
OriginalL'auteur Anonymous
J'ai remarqué que vous pouvez également obtenir des erreurs si vous ne spécifiez pas les angles correctement, même lors de l'utilisation de
glm::rotate(Model, angle_in_degrees, glm::vec3(x, y, z))
vous pouvez encore rencontrer des problèmes. Le correctif que j'ai trouvé pour cet été en spécifiant le type deglm::rotate(Model, (glm::mediump_float)90, glm::vec3(x, y, z))
au lieu de direglm::rotate(Model, 90, glm::vec3(x, y, z))
Ou tout simplement écrire le deuxième argument, l'angle en radians (précédemment en degrés), comme un flotteur avec pas de cast, comme dans:
Vous pouvez ajouter glm::radians() si vous souhaitez continuer à utiliser degrés. Et ajouter le comprend:
Selon le documentation l'angle est en degrés. Donc, en passant
3.14f
tourne par une petite quantité (3 degrés plutôt que de 180 degrés). Aussi, la fonction est un modèle de sorte passant entier comme l'angle de type d'argument ambigu (qui donne une erreur de compilation). La spécification de180.0f
serait susceptible d'être ce que tu voulais dire.OriginalL'auteur abe732