2016-02-28 3 views
0

J'ai une roue qui tourne et avance sur l'axe x. La roue est composée d'un cercle simple et de 4 lignes de diamètre. Maintenant, dans chaque itération, les lignes sont traduites et tournées d'un petit degré, et le cercle et le centre ne doivent être traduits que le long de l'axe des x.Comment transformer et utiliser efficacement les coordonnées résultantes dans une itération ultérieure opengl?

Quel serait le meilleur moyen d'y parvenir dans opengl? J'ai 2 méthodes à l'esprit

1) créer un tableau initial de sommets et de coordonnées de ligne, puis créer deux shaders pour le cercle et les lignes. Ensuite, dans chaque itération, calculer la matrice de rotation et de translation et passer au vertex shader cette matrice et les sommets initiaux à travers l'uniformité à chaque itération.

2) calculer la matrice de transformation une fois, puis dans chaque itération mettre à jour le tableau de vertex avec les nouvelles coordonnées (je ne sais pas comment retourner les données de .vertex shader si). Donc, quel serait le moyen le plus efficace de faire cette animation et si c'est 2 s'il vous plaît expliquer comment je peux y parvenir car je ne sais pas comment obtenir la sortie vertex shader d'une itération à utiliser dans l'itération suivante.

Répondre

2

Le meilleur meilleur façon de faire quelque chose dans OpenGL est généralement de rendre le code aussi simple et clair que possible. C'est aussi le moyen le plus efficace (environ 90% du temps) (Knuth) car un programme qui fonctionne est meilleur que celui qui ne fonctionne pas. Les CPU/GPU modernes sont si rapides que même un code "lent" est généralement assez bon. En comparant les deux approches, la première conserve les données d'origine et les transforme à chaque fois. La deuxième approche remplacerait les données originales par les nouvelles valeurs transformées. Comme les mathématiques informatiques ont une précision finie, il est possible que de petites erreurs s'accumulent avec le temps et déforment la géométrie. Donc, je recommanderais le premier. Si vous voulez essayer la deuxième approche, vous obtenez les sorties de vertex shader en rendant le rendu de la transformation activé, où les résultats ne sont pas dessinés mais stockés dans une ou plusieurs VBO que vous spécifiez. Le chapitre 7 de la 6ème édition SuperBible explique comment le faire.

Espérons que cela aide.