Maison >développement back-end >C++ >Comment définir une matrice de modèle sans utiliser glm::lookAt() ?

Comment définir une matrice de modèle sans utiliser glm::lookAt() ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-09 19:52:02493parcourir

How to Define a Model Matrix Without Using glm::lookAt()?

Transformation de la matrice du modèle

Pour définir la position et l'orientation d'un objet dans une scène 3D, on utilise généralement la matrice du modèle. Bien que glm::lookAt() soit une fonction pratique pour configurer une matrice de vue, elle peut ne pas être directement applicable à la matrice de modèle.

Transformation du modèle

Le la matrice de modèle transforme les positions des sommets de l'espace modèle (le système de coordonnées local de l'objet) vers l'espace mondial (le système de coordonnées de la scène entière). Il comprend trois éléments principaux :

  • Position : Translate l'objet le long des axes x, y et z.
  • Rotation : Fait pivoter l'objet autour des axes x, y et z. axes.
  • Échelle : Ajuste la taille de l'objet.

Création d'une matrice de modèle

Au lieu de en utilisant glm::lookAt(), vous pouvez définir manuellement une matrice de modèle en utilisant ce qui suit structure :

[ X-axis.x, X-axis.y, X-axis.z, 0 ]
[ Y-axis.x, Y-axis.y, Y-axis.z, 0 ]
[ Z-axis.x, Z-axis.y, Z-axis.z, 0 ]
[ trans.x,  trans.y,  trans.z,  1 ]

Par exemple, si vous souhaitez positionner un objet à (0,4, 0,0, 0,0) et le faire pivoter de 45 degrés autour de l'axe des x, vous définirez la matrice du modèle comme :

[ 1.0,  0.0,  0.0,  0.0 ]
[ 0.0,  0.707, 0.707, 0.0 ]
[ 0.0, -0.707, 0.707, 0.0 ]
[ 0.4,  0.0,  0.0,  1.0 ]

Implémentation du Shader

Dans votre vertex shader, vous pouvez ensuite transformer le position du sommet en utilisant la matrice du modèle comme suit :

gl_Position = CameraMatrix * ModelMatrix * Pos;

Où :

  • CameraMatrix est la matrice de vue-projection.
  • ModelMatrix est la matrice du modèle définie ci-dessus.
  • Pos est la position du sommet dans le modèle espace.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn