Système de coordonnées dans openGL

Le système de coordonnées droitier est utilisé dans openGL

  • Système de coordonnées pour droitier : tendez la main droite, le pouce pointe vers la direction positive de l'axe X, l'index pointe vers la direction positive de l'axe Y et les trois autres doigts pointent vers la direction positive de l'axe X. Axe z
  • Système de coordonnées gaucher : étirez la main gauche, le pouce pointe vers la direction positive de l'axe X, l'index pointe vers la direction positive de l'axe Y et les trois autres doigts pointent vers la direction positive
    de l'axe Z. La principale différence entre les deux est que la direction de l'axe Z est opposée.

1. Système de coordonnées

Plusieurs systèmes de coordonnées principaux dans openGL

  • Le système de coordonnées universel
    prend le centre de l'écran comme origine (0, 0, 0). Lorsque vous faites face à l'écran, l'axe X positif est à droite, l'axe Y positif est en haut et la direction de l'écran pointe vers vous est l'axe Z positif. La plage de la fenêtre est de (-1,1), c'est-à-dire que les coordonnées du coin inférieur gauche de l'écran sont (-1,-1,0) et les coordonnées du coin supérieur droit sont (1,1, 0). Nous utilisons ce système de coordonnées pour décrire la position
    des objets et des sources lumineuses.Lorsque des objets sont placés dans la scène (translation, rotation, etc.), ces opérations sont des transformations de coordonnées. OpenGL fournit trois commandes de transformation de coordonnées, glTranslate / glScale / glRotate. En utilisant la commande d'opération de matrice de transformation, n'importe quelle transformation de coordonnées complexe peut être réalisée.
  • Le système de coordonnées inertiel
    est compris conjointement par le système de coordonnées du monde et le système de
    coordonnées de l'objet. C'est la rotation du système de coordonnées de l'objet, qui n'est qu'une description d'un état intermédiaire, ce qui est pratique pour basculer le système de coordonnées de l'objet vers le monde. système de coordonnées.
  • Le système de coordonnées de l' objet/système de coordonnées de l'espace local
    est une coordonnée établie avec un certain point de l'objet comme origine. Cette coordonnée ne s'applique qu'à l'objet et est utilisée pour simplifier la description des coordonnées de chaque partie de l'objet. Lorsque l'objet est placé dans la scène, les transformations de coordonnées subies par chaque partie sont les mêmes et la position relative reste inchangée, ce qui peut être considéré comme un tout.
  • Système de coordonnées de la caméra : Système de coordonnées de
    l'observateur Prenez l'observateur comme origine et la direction de la ligne de visée est la direction positive de l'axe Z. Le pipeline openGL transformera d'abord les coordonnées mondiales en coordonnées d'observateur, puis découpera. Seule la scène dans la ligne de visée sera calculée à l'étape suivante

Envoyez-moi un message privé pour recevoir le matériel d'apprentissage et d'amélioration audio et vidéo C++ le plus récent et le plus complet, y compris ( C/C++ , Linux , FFmpeg , webRTC , rtmp , hls , rtsp , ffplay , srs )

 

Coordonner le processus de transformation


Après chaque coloration de sommet dans openGL, les sommets visibles sont des coordonnées de périphérique normalisées, c'est-à-dire que les valeurs x, y et z de chaque sommet doivent être comprises entre -1 et 1, et les sommets au-delà de cette plage sont invisibles. Le processus de normalisation des coordonnées de l'appareil, puis de conversion en coordonnées d'écran est un processus étape par étape dans lequel les sommets des objets sont également convertis en plusieurs systèmes de coordonnées avant d'être finalement convertis en coordonnées d'écran. Dans ces repères trop spécifiques, certaines opérations ou opérations sont plus commodes.

matrice de transformation

Afin de transformer les coordonnées d'un système de coordonnées à un autre, nous devons utiliser plusieurs matrices de transformation, couramment utilisées trois matrices : modèle, vue et projection.

Pile de matrices de transformation de coordonnées

Le haut de la pile est la matrice de transformation de coordonnées actuelle. Chaque coordonnée entrant dans le pipeline openGL sera d'abord multipliée par cette matrice, et le résultat est la coordonnée mondiale du point correspondant dans la scène spécifique. La transformation des coordonnées dans openGL se fait par le biais d'opérations matricielles. La multiplication matricielle dans la transformation est un produit croisé, et le résultat contient la direction, qui n'est pas conforme à la loi commutative.
Les coordonnées de départ des sommets de l'objet sont des coordonnées locales, qui seront ensuite converties en coordonnées mondiales, coordonnées d'observateur, coordonnées de découpage, et se termineront finalement sous la forme de coordonnées d'écran. Vous pouvez vous référer à l'image ci-dessous

2. Espace coordonné

espace local

Fait référence à l'espace de coordonnées où se trouve l'objet, c'est-à-dire l'endroit où l'objet commence au début, qui est local par rapport à l'objet

espace mondial

Il fait référence à l'espace de coordonnées des sommets de l'objet par rapport au monde. Si les objets sont dispersés dans le monde, les coordonnées de l'objet seront transformées de l'espace local à l'espace mondial. La transformation est implémentée par le Model Matrix

  • Matrice de modèle Une matrice de modèle
    est une matrice de transformation qui peut placer un objet dans sa position et son orientation appropriées en le déplaçant, en le mettant à l'échelle et en le faisant pivoter. Imaginez que vous vouliez mettre une chaise dans une pièce, vous devez d'abord la rétrécir (elle est trop grande dans l'espace local), la déplacer quelque part dans la pièce, puis la faire pivoter un peu à gauche et à droite sur l'axe y pour l'arranger proprement . est de transformer les coordonnées locales en différents endroits de la scène/du monde

espace d'observation/espace d'observation

L'espace d'observation est aussi appelé la caméra d'openGL, il est donc parfois appelé l'espace de la caméra ou l'espace des yeux. L'espace de visualisation est le résultat de la conversion des coordonnées de l'espace mondial en coordonnées devant le champ de vision de l'utilisateur. C'est-à-dire que l'espace d'observation est l'espace observé du point de vue de la caméra.
Et cela se fait généralement par une combinaison de déplacements et de rotations, en traduisant/tournant la scène afin que certains objets soient transformés devant la caméra.
Ces transformations combinées sont généralement stockées dans une View Matrix , qui est utilisée pour transformer les coordonnées mondiales en espace de vue.

espace de découpage

  • Processus d'écrêtage
    À la fin de l'exécution d'un vertex shader, openGL s'attend à ce que toutes les coordonnées tombent dans une certaine plage (-1,1), et tous les points en dehors de cette plage doivent être écrêtés. Les coordonnées coupées sont ignorées et le reste des coordonnées devient des fragments visibles à l'écran. Cet espace est appelé espace de découpage.
    Afin de transformer les coordonnées des sommets des coordonnées de l'observateur en espace de découpage, nous devons définir une matrice de projection (matrice de projection) , qui peut spécifier une plage de coordonnées, et la matrice de projection transformera les coordonnées dans cet espace. Afin de normaliser la plage de coordonnées de l'appareil (-1,1), toutes les coordonnées en dehors de la plage ne seront pas mappées dans la plage -1 à 1, elles seront donc tronquées,
    telles que -1000 à 1000 dans chaque dimension, Après écrêtage, les coordonnées (12400, 500, 700) ne seront pas visibles car sa coordonnée x est hors plage (supérieure à 1000), elle est convertie en une coordonnée de périphérique normalisée supérieure à 1, elle est donc écrêtée de la
    projection: sera dans une certaine plage Le processus de transformation des coordonnées du Frustum en un système de coordonnées de dispositif normalisé, connu sous le nom de
    frustum de projection Frustum: La boîte de visualisation créée par la matrice de projection est appelée le frustum, et chaque coordonnée qui se produit dans le tronc de cône apparaîtra éventuellement dans le sur l'écran de l'utilisateur. (Je ne comprends pas très bien, est-ce similaire à un cône ou à un cylindre, coupé avec un couteau du milieu, et la plage de la surface de coupe équivaut à un tronc de cône ??

  • Division des perspectives
  • La division en perspective est effectuée une fois que tous les sommets ont été transformés en espace de clip. Dans ce processus, nous divisons les composants x, y, z du vecteur de position par le composant homogène w (profondeur) du vecteur, respectivement.
    La division de perspective est le processus de transformation des coordonnées de l'espace de clip 4D en coordonnées de périphérique normalisées 3D. Cette étape est effectuée automatiquement à la fin de chaque exécution du vertex shader.
    Ensuite, les coordonnées finales sont mappées dans l'espace de l'écran (en utilisant les paramètres de glViewport) et transformées en fragments
    . Les matrices de projection qui transforment les coordonnées de la vue en coordonnées de recadrage peuvent être divisées en deux formes différentes : Matrice de projection orthographique) ou matrice de projection en perspective (Projection en perspective Matrice)

projection en perspective

Dans la vraie vie, plus loin de l'observateur, plus la chose semble petite, ce phénomène est appelé perspective (Perspective)
L'effet de perspective dans openGL est obtenu par la matrice de perspective. Cette matrice de perspective mappe l'étendue du tronc donné à l'espace de découpage, en plus de modifier la valeur w (profondeur) de chaque coordonnée de sommet afin que la composante w de la coordonnée de sommet la plus éloignée du spectateur soit plus grande. Les coordonnées qui sont transformées en espace de clip sont toujours comprises entre -w et w. Ainsi, une fois que les coordonnées sont dans l'espace du clip, la division de perspective est appliquée aux coordonnées de l'espace du clip

projection orthographique

Lors de l'utilisation de la projection orthographique, chaque coordonnée de sommet est mappée directement dans l'espace du clip sans aucune division de perspective fine (elle effectue toujours une division de perspective, mais le composant w n'est pas modifié et reste à 1, donc cela ne fonctionne pas)

3. Combinaison de systèmes de coordonnées

Nous avons créé une matrice de transformation pour chacune des étapes ci-dessus : matrice de modèle, matrice d'observation, matrice de projection , une coordonnée de sommet sera transformée en coordonnée de clip selon le processus suivant
Vclip = Mpro * Mview * Mmodel * Vlocal
. Cette série de transformations matricielles doit être de droite à gauche, dans l'ordre MVP. Le sommet final doit être assigné à gl_Position dans le vertex shader, openGL effectuera automatiquement la division en perspective et la
transformation de la fenêtre de recadrage : openGL effectue une division en perspective sur les coordonnées de recadrage pour les transformer en coordonnées de périphérique normalisées, puis openGL utilise les paramètres à l'intérieur de glViewPort Pour mapper normalisé coordonnées de l'appareil aux coordonnées de l'écran, chaque coordonnée est associée à un point sur l'écran, ce processus est appelé transformation de la fenêtre d'affichage
. est effectué par le système

 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/m0_60259116/article/details/124355940
conseillé
Classement