Pourquoi utiliserais-je la pile matricielle de OpenGL (par opposition à l'enveloppement de ma propre classe matricielle et d'utiliser cela)? Je ne sais pas vraiment pourquoi il est si compliqué pour une tâche aussi simple. Il y a un cas d'utilisation spéciale pour cela? P>
Si ce n'est pas nécessaire, qu'est-ce qu'un bon remplacement pour cela? P>
5 Réponses :
Vous utiliseriez surtout les piles matricielles intégrées car OpenGL les appliquera automatiquement. Ils ont été supprimés dans des versions récentes de OpenGL, donc au moins quelques personnes croient apparemment qu'ils sont inutiles. Personnellement, je pense que c'était une mauvaise décision, mais telle est la vie. L'alternative consiste à les mettre en œuvre vous-même - la seule consolation étant que pour la plupart des utilisations des graphismes 3D, vous allez généralement devoir faire de la multiplication de matrice (et telle) de toute façon, de toute façon, il ne suffit pas beaucoup de différence. p>
Juste une question secondaire: Comment puis-je appliquer (?) Mes matrices sur la scène dans chaque cadre sans la pile matricielle?
@Clark: Dans ce cas, vous définissez généralement vos matrices de transformation actuelles sous forme de uniforme code> S et "Appliquer" dans un sommet de vertex, quelque chose comme:
Projection uniforme MAT4; uniforme MAT4 Model_View; dans Vec4 Vertex; GL_POSITION = Projection * Model_View * Vertex; Code> Vous pouvez également consulter GLM: GLM.G- Truc.net .
Ce n'est pas nécessaire - vous pouvez faire toute votre propre matrice fonctionnant vous-même et appelez GlloadMatrix tout le temps - mais aussi, il n'est pas nécessaire de le remplacer. Vous faites simplement la vie difficile si vous utilisez des vbos et des listes d'affichage. P>
Les piles matricielles de OpenGL (il y a des multiples - un pour chaque mode matriciel) sont destinés à être utilisés avec des modèles hiérarchiques. C'est-à-dire que vous pouvez définir le gréement d'un objet enfant (dire, une roue) en ce qui concerne son corps parent (par exemple, une voiture), sans tenir compte de l'emplacement / de l'orientation du parent lorsque l'enfant est tiré. C'est-à-dire que cela vous permet de composer facilement et de manière intuitive. P>
Les piles matix (et les opérations de matrice GL en général) ne sont pas substituées à une bibliothèque de mathématiques matricielle à usage général. Ils existent simplement pour permettre des transformations composées pour être appliquées efficacement aux données de sommet. Comme d'autres l'ont dit, cette fonctionnalité a été retirée de OpenGL avec la disparition du pipeline de fonction fixe, car les besoins des programmes de shader sont moins uniformes que les besoins de l'ancien pipeline. P>
La pile matricielle est utilisée pour conciser des matrices. Généralement utilisé pour les modèles héritariques où une transformation est exprimée par rapport à une autre. On peut charger une matrice sur la pile et transformer les sommets dans cet espace, puis revenir à l'espace parent en faisant apparaître la pile. Vous pouvez gérer tout cela vous-même dans le code et vous préféreriez souvent - en particulier le cas où les matrices sont utilisées pour une autre chose en plus de simplement dessiner ou lorsque vous les accumulez souvent. Un système d'animation serait un exemple classique. P>
Les matrices sont le mécanisme par lequel la géométrie (sommets) que vous fournissez des systèmes de coordonnées de changement et une projection, afin de finalement finalement sur l'écran dans l'espace pixel. Donc, dans ce sens, certaines matrices représentent différents systèmes de coordonnées (parenthèse parent / relation entre les modèles hiérarchiques tels que les jambes), et certaines représentent des transformations de l'espace mondial pour afficher l'espace à l'espace de l'appareil (pixel). Fondamentalement, ils sont un mécanisme permettant de manipuler vos sommets, mais ils correspondent sémitiquement aux opérations telles que celles. Ils viennent dans une pile pour faciliter la programmation avec eux. P>