Question

Je commence à en apprendre davantage sur le rendu 3D et j'ai de bons progrès. Je l'ai ramassé beaucoup en ce qui concerne les matrices et les opérations générales qui peuvent être effectuées sur eux.

Une chose que je ne suis pas encore tout à fait suivant est l'utilisation de matrices OpenGL. Je vois cela (et des choses comme ça) beaucoup:

x y z n
-------
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Alors ma meilleure compréhension, est qu'il est normalisé (pas grandeur) 4 dimensions, matrice colonne principale. Que cette matrice en particulier est appelée la « matrice d'identité ».

Quelques questions:

  • Quelle est la dimension "nième"?
  • Comment et quand sont-ils appliqués?

Ma plus grande confusion se pose de la façon dont OpenGL utilise ce type de données.

Était-ce utile?

La solution

La réponse courte qui pourrait vous aider à démarrer est que la dimension « nième », comme vous l'appelez, ne représente pas une quantité visualisable. Il est ajouté comme un outil pratique pour permettre multiplications de matrice qui provoquent la projection de la traduction et de la perspective. Une matrice 3x3 intuitive ne peut pas faire ces choses.

Une valeur 3D représentant un point dans l'espace obtient toujours 1 en annexe que la quatrième valeur pour faire ce travail trick. Une valeur 3D représentant une direction (à savoir une normale, si vous êtes familier avec ce terme) obtient 0 dans le quatrième joint en annexe place.

Autres conseils

Dans la plupart des graphiques 3D d'un point est représenté par un vecteur à 4 composantes (x, y, z, w), où w = 1. Les opérations usuelles appliquées sur un point comprennent translation, mise à l'échelle, la rotation, la réflexion, l'inclinaison et la combinaison de ceux-ci.

Ces transformations peuvent être représentées par un objet mathématique appelé « matrice ». Une matrice applique sur un vecteur comme ceci:

[ a b c tx ] [ x ]   [ a*x + b*y + c*z + tx*w ]
| d e f ty | | y | = | d*x + e*y + f*z + ty*w |
| g h i tz | | z |   | g*x + h*y + i*z + tz*w |
[ p q r s  ] [ w ]   [ p*x + q*y + r*z +  s*w ]

Par exemple, l'échelle est représenté comme

[ 2 . . . ] [ x ]   [ 2x ]
| . 2 . . | | y | = | 2y |
| . . 2 . | | z |   | 2z |
[ . . . 1 ] [ 1 ]   [ 1  ]

et la traduction comme

[ 1 . . dx ] [ x ]   [ x + dx ]
| . 1 . dy | | y | = | y + dy |
| . . 1 dz | | z |   | z + dz |
[ . . . 1  ] [ 1 ]   [   1    ]

L'une des raisons pour le 4ème composant est de faire une représentable de traduction par une matrice.

L'avantage d'utiliser une matrice est que de multiples transformations peuvent être combinés en une multiplication par l'intermédiaire de la matrice.

Maintenant, si le but est simplement d'apporter la traduction sur la table, alors je dirais que (x, y, z, 1) au lieu de (x, y, z, w) et faire la dernière ligne de la matrice toujours [0 0 0 1], comme cela se fait habituellement pour les graphiques 2D. En fait, le vecteur 4-composant sera mappée retour à la normale vecteur 3-vecteur par l'intermédiaire de la formule suivante:

[ x(3D) ]   [ x / w ]
| y(3D) ] = | y / w |
[ z(3D) ]   [ z / w ]

Ceci est appelé homogène coordonnées . Permettre ce qui rend la projection en perspective exprimable avec une matrice aussi, qui peut encore se combiner avec toutes les autres transformations.

Par exemple, étant donné que les objets devraient plus loin plus petit à l'écran, nous transformons les coordonnées 3D en 2D en utilisant la formule

x(2D) = x(3D) / (10 * z(3D))
y(2D) = y(3D) / (10 * z(3D))

Maintenant, si l'on applique la matrice de projection

[ 1 . .  . ] [ x ]   [  x   ]
| . 1 .  . | | y | = |  y   |
| . . 1  . | | z |   |  z   |
[ . . 10 . ] [ 1 ]   [ 10*z ]

alors les véritables coordonnées 3D deviendraient

x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1

donc nous avons juste besoin de couper la coordonnée z vers des projets 2D.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top