2017-09-02 7 views
0

J'apprends OpenGL et je suis un peu confus à propos de la définition de la position des données de sommet.Comment définir une unité pour un objet dans OpenGL

Par exemple, je veux dessiner un rectangle de taille 300 mm x 300 mm, ce que je comprends, je peux supposer 1 unité OpenGL = 1 mm, puis-je configurer les données de sommet comme celui-ci:

data = [-0.5, 0.5, # top left 
     -0.5, -0.5, # bottom left 
     0.5, 0.5, # top right 
     0.5, -0.5] # bottom right  

Alors la taille du rectangle est 1 unité OpenGL ou 1mm (si je ne me trompe pas), puis l'agrandit de 300 en utilisant la matrice du modèle.

Ou je pourrais le définir comme ceci:

data = [ 0.0, 300.0, # top left 
     0.0, 0.0, # bottom left 
     300.0, 300.0, # top right 
     300.0, 0.0] # bottom right 

la taille du rectangle sera de 300 unités OpenGL ou 300mm.

Je ne sais pas quelle approche est la bonne.

Pourriez-vous mec s'il vous plaît pointez-moi dans la bonne direction.

Merci

Répondre

1

de coordonnées OpenGL ont pas "unités". Quels que soient les fragments qui ont été pixellisés et terminés, dans les coordonnées normalisées des périphériques (NDC), dans la boîte 2X2X2 (ou 2X2X1), centrée autour de l'origine, sont des fragments qui peuvent être mappés aux coordonnées de la fenêtre et seront écrits dans le framebuffer (En supposant qu'ils ont passé le test de profondeur). Ce que vous faites pour obtenir des fragments est à vous. De votre question je comprends que vous parlez de projection orthographique, auquel cas vérifiez votre matrice de projection orthographique, elle définit les coordonnées des "bords d'écran". Par conséquent, l'unité de longueur réelle des coordonnées de vos sommets est fonction de votre projection et de la taille de l'écran physique.

Je suggère fortement de lire sur la façon simple dont les transformations des coordonnées de vertex à la position de l'écran se produisent. Par exemple. http://www.songho.ca/opengl/gl_transform.html, est légèrement dépassé mais couvre très bien l'idée.
Vérifiez également http://www.songho.ca/opengl/gl_projectionmatrix.html, en particulier la section sur la projection orthographique. Cela devrait vous donner une idée de la façon de construire une matrice de projection orthographique avec les coordonnées du bas, de gauche, de droite et du haut de votre choix.