Pourquoi utiliser glTranslatef? Pourquoi ne pas tout simplement changer le rendu de co-ords?
Je suis en train de faire un simple jeu de Pacman en C++, en utilisant OpenGL et SDL. J'allais utiliser le glTranslatef
fonction, mais il a semblé plus simple de juste changer la co-ords que la fonction de dessin utilisé. Je me demandais, pourquoi voudriez-vous/devriez-vous utiliser glTranslatef
?
Voici un exemple rapide de deux glTranslatef
et il suffit de changer de co-ords
glPushMatrix()
glTranslatef(10,0,0)
draw()
glPopMatrix()
ou
//Assuming the draw function took co-ords
draw(x+10 ,y ,z)
Ma conjecture est qu'ils sont effectivement les mêmes, c'est le seul de préférence. Pouvez-vous m'éclairer?
MODIFIER
Veuillez noter que je ne parle que de la fonction de traduction. Tout sur le redimensionnement et la rotation n'est pas pertinent, je parle SEULEMENT à propos des traductions. (C'est parce que les traductions sont facile sans glTranslatef
fonction, alors que les deux autres sont plus complexes sans leurs fonctions)
- Savez-vous que l'appel de glTranslate, glRotate et glScale modifier le maxtrix de la pile tout en ajoutant simplement un décalage de quelques coordonner ne l'est pas?
- Oui, mais je n'avais pas pensé à ça. Donc, vous êtes en soulignant que, en modifiant la matrice actuelle, vous pouvez déplacer/pivoter/échelle de TOUT dessiné dans cette matrice, correct?
- Tout ce que vous dessinez c'est multiplier par le madelview de la matrice, donc après le déplacement/rotation/échelle des appels tout ce qui est dessiné est affectée par ces transformations. Vous pouvez avoir un coup d'oeil à ceci: glprogramming.com/red/chapter03.html#name2
- Exactement, ce qui permettrait de simplifier le déplacement/rotation/mise à l'échelle des lots d'objets. Merci pour cette sortie les gars.
Vous devez vous connecter pour publier un commentaire.
En héritage OpenGL matrice commandes de manipulation, comme glTranslate, de modifier la matrice qui est actuellement en tête de la matrice sélectionnée de la pile.
Par exemple, lorsque vous sélectionnez MODELVIEW que le courant de la pile et de l'appel glTranslate, le courant de la matrice modelview est remplacé par M_current * M_translation.
Votre code efficacement effectue une traduction supplémentaire pour les sommets soumis à la GL, mais, contrairement à l'ajout d'un décalage constant de vos coordonnées x, il y a peut être d'autres transformations comme la rotation, la mise à l'échelle et peut-être même un ou plusieurs de traduction déjà encodé dans votre matrice MODELVIEW.
Donc pas, à moins que votre matrice MODELVIEW n'est pas l'identité, les deux ne sont généralement pas d'équivalent.
Toutefois, si votre seul but est de traduire vos vertices et de ne jamais changer la position encore une fois, vous pouvez ajouter un décalage constant.
Si jamais vous avez seulement besoin d'une traduction, vous pouvez le faire sans aucun problème à l'intérieur d'un shader. De cette façon, vous pouvez modifier le décalage de manière dynamique par l'intermédiaire d'un uniforme. Si vous ajoutez un décalage constant et de télécharger vos données à un VBO et le besoin de le changer à nouveau par la suite, vous aurez besoin de mettre à jour la mémoire tampon, qui est simplement un gaspillage de bande passante et de la mémoire des transactions.