2010-08-02 4 views
1

Si j'ai matrice de transformation en perspective de style commun comme celui-ciComment puis-je faire de la transformation de perspective dans OpenGL?

 
/focus 0 cx \ 
| 0  focus cy | 
\ 0  0  1/

comment les paramètres de configuration pour glFrustum ou gluPerspective pour obtenir correcte transformation

par exemple:

 
glFrustum (-cx, screenWidth - cx, -cy, screenHeight - cy, focus, focus + 1000) 
gluLookAt(0.0, 0.0, -focus,   0.0, 0.0, 0.0,   0.0, 1.0, 0.0); 

ne pas créer une transformation correcte = (

+0

pouvez-vous expliquer ce que vous appelez une «matrice de transformation de perspective de style commun»? – Bahbar

+0

opposé à la perspective oblique, je présume – Calvin1602

+0

matrice énumérée ci-dessous P = ((focus, 0 cx), (0, focus, cy), (0,0,1)) où la transformation perspective écrire comme: (x, y, 1) = P * R * T (X, Y, Z, 1) Je vais essayer de reformuler la question. Si je connais la distance focale de la caméra et les coordonnées du point principal (point d'intersection de l'axe optique principal (Z) et du plan de projection). Comment dois-je appeler la méthode glFrustum pour perfomer – Vie

Répondre

2

Je l'ai fait !!! =) Peut-être quelqu'un qu'il sera utile

 
glFrustum(-znear*cx/fx, znear*(w - cx)/fx, 
      -znear*cy/fy, znear*(h - cy)/fy, 
      znear, zfar); 
+0

Mais c'est une transformation de liner sans distorsion! – Vie

1
glMatrixMode(GL_PROJECTION) 
glFrustum (0, screenWidth ,0, screenHeight, focus, focus + 1000) 
glMatrixMode(GL_MODELVIEW) 
glLookAt(...) 

Mais la matrice donnée n'est pas une matrice de transformation 4D comme attendu par openGL; vous devriez vérifier http://www.opengl.org/sdk/docs/man/xhtml/glFrustum.xml

Et vous définissez votre plan de coupure proche à "focus", donc tout ce qui est fermé sera coupé! Vous devriez choisir une valeur plus décente, comme 1.0. focus + 1000 est logique, bien que

+0

C'est exactement la transformation équivalente ?! je ne vois pas de distorsion persistante ... les lignes projetées ressemblent à perallel = ( et où dois-je configurer le point principal de la caméra (cx, cy)? – Vie

+0

Vous devez utiliser gluPerspective au lieu de glFrustum, il sera plus simple à configurer. Qu'est-ce que vous appelez "camera principal point"? Dans openGL la caméra est toujours à (0,0,0), pointant vers -Z (dans l'espace du monde) – Calvin1602

Questions connexes