Warum glTranslatef? Warum nicht einfach ändern Sie den rendering-co-ords?
Mache ich ein einfaches Pacman-Spiel in C++ mithilfe von OpenGL und SDL. Ich wollte mit der glTranslatef
Funktion, aber es schien einfacher, nur nach änderungen der co-ords, dass die zeichnen-Funktion verwendet. Ich Frage mich, warum möchten Sie/sollten Sie glTranslatef
?
Hier ein kurzes Beispiel für beide glTranslatef
und einfach die änderung der co-ords
glPushMatrix()
glTranslatef(10,0,0)
draw()
glPopMatrix()
oder
//Assuming the draw function took co-ords
draw(x+10 ,y ,z)
Meine einzige Vermutung ist, dass Sie effektiv die gleichen, es ist die alleinige Präferenz. Können Sie mich aufklären?
BEARBEITEN
Bitte beachten Sie, dass ich spreche hier nur über die translate-Funktion. Alles über die Skalierung und das drehen ist irrelevant, ich Rede NUR über übersetzungen. (Dies ist, weil die übersetzungen sind einfach ohne die glTranslatef
Funktion, wo die anderen beiden sind komplexer, ohne Ihre Funktionen)
Ja, aber ich hatte nicht gedacht, dass. So sind Sie darauf hinzuweisen, dass durch die Veränderung der aktuellen matrix, Sie können verschieben/drehen/skalieren ALLES gezogen, matrix, richtig?
Alles, das Sie zeichnen, ist es mehrfach durch den madelview matrix, so dass nach dem verschieben/drehen/skalieren ruft alles, was gezeichnet ist, ist betroffen von diesen Transformationen. Sie können einen Blick auf diese: glprogramming.com/red/chapter03.html#name2
Genau, das vereinfachen würde, verschieben/drehen/skalieren viele Objekte. Danke für den Hinweis, Jungs.
InformationsquelleAutor Matthew Reynolds | 2013-08-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
In legacy OpenGL-matrix-manipulation Befehle, wie z.B. glTranslate, verändern Sie die matrix, die derzeit der ausgewählten matrix-stack.
Zum Beispiel, wenn Sie wählen Sie MODELVIEW als der aktuelle stack und call glTranslate, die aktuelle modelview-matrix wird ersetzt durch M_current * M_translation.
Dein code effektiv führt eine zusätzliche translation auf Eckpunkte vorgelegt, um die GL aber, im Gegensatz zum hinzufügen einer Konstanten Versatz zu Ihrer x-Koordinaten, möglicherweise gibt es weitere Transformationen wie Rotation, Skalierung und ggf. auch eine oder mehrere übersetzung schon kodiert in Ihrer aktuellen MODELVIEW-matrix.
Nicht So, es sei denn, Ihre aktuelle MODELVIEW-matrix ist nicht die Identität, die zwei sind im Allgemeinen nicht äquivalent sind.
Allerdings, wenn Ihre einzige Absicht ist zu übersetzen Ihre Eckpunkte und verändern Sie niemals die position wieder, die Sie hinzufügen können, einen Konstanten Versatz.
Wenn Sie jemals brauchen nur eine übersetzung, können Sie es ohne Probleme innerhalb eines shader. Auf diese Weise können Sie ändern den offset dynamisch über eine uniform. Wenn Sie hinzufügen ein konstanter offset und laden Sie Ihre Daten in ein VBO und es danach wieder, Sie müssen aktualisieren, die Puffer, das ist einfach eine unnötige Verschwendung von Bandbreite und Speicher-Transaktionen.
InformationsquelleAutor thokra